我正在一个有两个控制器的Spring项目中
AddOwnerForm.java和EditOwnerForm.java。两者都将流转发到form.jsp
AddOwnerForm将新的Owner对象传递给jsp,而EditOwnerForm从数据库中获取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" %>
我不明白此代码段
<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标记如何检查Owner对象是否为新对象。“ new”是JSTL的关键字吗?
B.为什么他们使用PUT方法编辑所有者,为什么不进行POST?
那不是检查对象是否是新的。它正在考虑owner作为映射,并尝试访问映射到key的元素new。
owner
new
这取决于API。请注意,通常,浏览器不支持使用PUT方法提交表单。您将需要使用javascript发送PUT请求。
要回答您的评论,不可以。它认为owner是实际的Map。例如,
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");
并返回。