检查对象是否是 JSTL 中的新对象



我正在做一个Spring项目,其中有两个控制器

AddOwnerForm.java & EditOwnerForm.java.两者将流转发形成.jsp

AddOwnerForm 将一个新的 Owner 对象传递给 jsp,

而 EditOwnerForm 从数据库中获取 Owner 对象,然后将其传递给 jsp。

下面是 JSP 代码。

形式.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" %>

我不明白这个代码片段

<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>

一个。Jstl 标记如何检查所有者对象是否为新对象。"new"是JSTL的关键字吗?

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

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

${owner['new']}

相当于

${owner.isNew()}

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

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

一个。Jstl 标记如何检查所有者对象是否为新对象。"new"是JSTL的关键字吗?

这不是检查对象是否是新的。它正在考虑owner映射并尝试访问映射到键new的元素。

相关:

  • 根据 JSTL 的键从哈希映射中获取值
  • EL 通过整数键访问映射值

二.为什么他们使用 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");

并返回该内容。

最新更新