2015-09-26 3 views
6

У меня есть следующая форма весной, в которой отображаются сообщения об ошибках. Мне интересно, когда следует использовать spring: bind? Чем это отличается от этого? Я изучил эти страницы a, b, но я все еще озадачен.В чем разница между весной: привязка и форма: ошибки?

<form:form method="post" 
    action="http://localhost:8080/project/calculator/process" 
    modelAttribute="keyPadForm"> 
     Name1: <form:input type="text" path="name1" /> 
     <form:errors path="name1" /> 

<form:form method="post" 
    action="http://localhost:8080/project/calculator/process" 
    modelAttribute="keyPadForm"> 
    <spring:bind path="name1"> 
     Name1: <form:input type="text" path="name1" /> 
     <form:errors path="name1" /> 
    </spring:bind> 

ответ

2

В вашем втором случае spring:bind тег является устаревшим, вашей первой формой

<form:form method="post" 
    action="http://localhost:8080/project/calculator/process" 
    modelAttribute="keyPadForm"> 
     Name1: <form:input type="text" path="name1" /> 
     <form:errors path="name1" /> 

является своим родом синтаксического сахара , и эквива одолжил без использования библиотеки form тегов, а только общие теги формы HTML, будет основываться на spring:bind и будет выглядеть примерно так:

<spring:nestedPath path="keyPadForm"> 
    <form method="post" action="http://localhost:8080/project/calculator/process"> 
    <spring:bind path="name1"> 
     Name1:<input type="text" name="${status.expression}" value="${status.value}"> 
     <span class="fieldError">${status.errorMessage}</span> 
    </spring:bind> 
    </form> 
</spring:nestedPath> 

Есть сценарии, где вы можете сделать различие, например, form:input - это всегда двусторонняя привязка, поэтому значение отправляется на сервер и отображаемое текущее значение, где, как и в случае с spring:bind, вы можете добиться односторонней привязки, только отправляя на сервер, опуская значение, например. <input type="text" name="${status.expression}">, но основная суть в том, что form библиотеки тегов обеспечивает более удобную связанные связывания метки

2

С spring:bind, вы можете использовать ${status.error}, чтобы проверить, если name1 поля имеет ошибку, и отобразить другой класс CSS условно.
Сообщение об ошибке по-прежнему отображается через form:errors, но таким образом вы получаете больше элементов управления.
, например:

<form:form method="post" modelAttribute="userForm" action="${userActionUrl}"> 
    <spring:bind path="name"> 
    <div class="form-group ${status.error ? 'has-error' : ''}"> 
     <label>Name</label> 
     <form:input path="name" type="text" id="name" /> 
     <form:errors path="name" /> 
    </div> 
    </spring:bind> 
</form:form> 

и вы можете обратиться к этой Spring MVC Form – Check if a field has an error

Смежные вопросы