2014-01-06 7 views
0

Я работаю над весенним проектом, в котором есть два контроллераПроверка, если объект является новым в JSTL

AddOwnerForm.java & EditOwnerForm.java. Как пересылка потока в form.jsp

AddOwnerForm передает новый объект Owner в jsp, тогда как EditOwnerForm извлекает объект Owner из db и передает его в 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

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"); 

и возвращает это.

+0

Так вы имеете в виду, если я 'владельца Владелец = новый владелец(); model.addAttribute (владелец); ' в моем контроллере Это внутренне выполняется' map.put (new, Owner) '? Откуда взята карта? – underdog

+0

Я также пробовал '' он не работает – underdog

+0

@ShivangSarawagi См. Мое редактирование. Кроме того, я не знаю, что вы подразумеваете под _not working_. Чего вы ожидаете? 'empty' проверяет, есть ли атрибут с именем' owner'. –

3

Я добавляю свой ответ здесь для записи, потому что я много искал и, наконец, нашел правильный ответ.

${owner['new']} 

является эквивалентом

${owner.isNew()} 

Метод определен в классе BaseEntity.java, который является классом для всех объектов в пакете модели.

public boolean isNew() { 
    return (this.id == null); 
} 
Смежные вопросы