2014-01-06 51 views
0

我在春天的项目工作新的地方有两个控制器检查如果对象是在JSTL

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

我不明白这个代码片断

<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标记检查。 “新”是JSTL的关键字吗?

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

回答

1

答:Jstl标记如何检查Owner对象是否为new。 “新”是JSTL的关键字吗?

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

相关:

B.他们为什么要使用编辑业主为什么不张贴PUT方法?

这取决于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"); 

,并返回。

+0

所以你的意思是,如果我做 '所有者所有者=新的所有者(); model.addAttribute(owner);' 在我的控制器中 这是内部做'map.put(new,Owner)'? 地图来自哪里? – underdog

+0

我也试过''这不起作用 – underdog

+0

@ShivangSarawagi看我的编辑。另外,我不知道你的意思是不是working_。你期望发生什么? 'empty'检查是否有一个名为'owner'的属性。 –

3

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

${owner['new']} 

${owner.isNew()} 

等效的方法是在类BaseEntity.java其是用于在模型中包中的所有实体的父类中定义。

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