【问题标题】:Checking if the object is new in JSTL检查对象是否在 JSTL 中是新的
【发布时间】:2014-01-23 11:49:33
【问题描述】:

我正在开发一个有两个控制器的 Spring 项目

AddOwnerForm.java 和 EditOwnerForm.java。两者都将流转发到 form.jsp

AddOwnerForm 将一个新的 Owner 对象传递给 jsp,而 EditOwnerForm 从 db 中获取 Owner 对象,然后将其传递给 jsp。

下面是JSP代码。

Form.jsp

<%@ include file="/WEB-INF/view/include.jsp" %>
<%@ include file="/WEB-INF/view/header.jsp" %>
<c:choose>
    <c:when test="${owner['new']}"><c:set var="method" value="post"/></c:when>
    <c:otherwise><c:set var="method" value="put"/></c:otherwise>
</c:choose>

<h2><c:if test="${owner['new']}">New </c:if>Owner:</h2>
<form:form modelAttribute="owner" method="${method}">
  <table>
    <tr>
      <th>
        First Name:
        <br/>
        <form:input path="firstName" size="30" maxlength="80"/>
      </th>
    </tr>
    <tr>
      <th>
        Last Name:
        <br/>
        <form:input path="lastName" size="30" maxlength="80"/>
      </th>
    </tr>
    <tr>
      <th>
        Address:
        <br/>
        <form:input path="address" size="30" maxlength="80"/>
      </th>
    </tr>
    <tr>
      <th>
        City:
        <br/>
        <form:input path="city" size="30" maxlength="80"/>
      </th>
    </tr>
    <tr>
      <th>
        Telephone:
        <br/>
        <form:input path="telephone" size="20" maxlength="20"/>
      </th>
    </tr>
    <tr>
      <td>
        <c:choose>
          <c:when test="${owner['new']}">
            <p class="submit"><input type="submit" value="Add Owner"/></p>
          </c:when>
          <c:otherwise>
            <p class="submit"><input type="submit" value="Update Owner"/></p>
          </c:otherwise>
        </c:choose>
      </td>
    </tr>
  </table>
</form:form>

<%@ include file="/WEB-INF/view/footer.jsp" %>

我看不懂这段代码sn-p

<c:choose>
        <c:when test="${owner['new']}"><c:set var="method" value="post"/></c:when>
        <c:otherwise><c:set var="method" value="put"/></c:otherwise>
</c:choose>

A. Jstl 标签如何检查 Owner 对象是否是新的。 “新”是 JSTL 的关键字吗?

B.为什么他们使用 PUT 方法来编辑所有者,为什么不使用 POST?

【问题讨论】:

    标签: java jsp jakarta-ee jstl


    【解决方案1】:

    我在这里添加我的答案作为记录,因为我搜索了很多,终于找到了正确的答案。

    ${owner['new']}
    

    相当于

    ${owner.isNew()}
    

    该方法在类 BaseEntity.java 中定义,该类是模型包中所有实体的超类。

    public boolean isNew() {
        return (this.id == null);
    }
    

    【讨论】:

      【解决方案2】:

      A. Jstl 标签如何检查 Owner 对象是否是新的。 “新”是 JSTL 的关键字吗?

      这不是检查一个对象是否是新的。它将owner 视为映射并尝试访问映射到键new 的元素。

      相关:

      B.为什么他们使用 PUT 方法来编辑所有者,为什么不使用 POST?

      这取决于 API。请注意,通常浏览器不支持使用 PUT 方法提交表单。您将需要使用 javascript 来发送 PUT 请求。


      回答您的评论,不。它认为owner 是一个实际的Map。例如,

      Map<String, Integer> owner = new HashMap<>();
      map.put("new", someInt);
      request.put("owner", owner);
      // or
      model.addAttribute("owner", owner);
      

      当你这样做时

      ${owner['new']}
      

      JSTL 在内部做类似

      的事情
      mapValue = (Map) request.getAttribute("owner");
      value = owner.get("new");
      

      然后返回。

      【讨论】:

      • 所以你的意思是如果我在我的控制器中做 Owner owner = new Owner(); model.addAttribute(owner); 那就是在内部做 map.put(new, Owner) ?图片来自哪里?
      • @ShivangSarawgi 查看我的编辑。另外,我不知道你所说的不工作是什么意思。你期望会发生什么? empty 检查是否存在名为 owner 的属性。
      • 感谢 Sotirios 的回复
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 2017-10-15
      • 2018-09-10
      • 2013-09-26
      • 2012-07-27
      相关资源
      最近更新 更多