spring:bind和form:errors有什么区别?

时间:2015-09-26 08:26:13

标签: java spring spring-mvc

我在Spring中有以下表单显示错误消息。我想知道我什么时候应该使用spring:bind?这有什么区别呢?我研究了这些页面ab,但我仍然感到困惑。

1

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

2

<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 个答案:

答案 0 :(得分: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标记库提供了更方便的绑定相关标记

答案 1 :(得分: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