この記事では、フィールドにエラーメッセージがあるかどうかを確認するSpringの `form tag`の例をいくつか紹介します。次のSpring MVC Beanの検証の例を確認してください。

使用される技術:

  1. 春4

  2. JSTL 1.2

…​.//Bean validation
import org.hibernate.validator.constraints.NotEmpty;
public class User {

    @NotEmpty
    String name;
   //...
}
//Controller class
@RequestMapping(value = "/users", method = RequestMethod.POST)
public String saveOrUpdateUser(
    @ModelAttribute("userForm") @Valid User user,
    BindingResult result, Model model) {

    if (result.hasErrors()) {
       //...
    } else {
       //...
    }
}

===  1.形式:エラー

'name'フィールドにエラーメッセージがある場合は、それを `form:errors`で表示することができます

<%@ taglib prefix=”spring” uri=”http://www.springframework.org/tags”%>
<%@ taglib prefix=”form” uri=”http://www.springframework.org/tags/form”%>

<form:form method=”post” modelAttribute=”userForm” action=”${userActionUrl}”>
<label>Name</label>
<form:input path=”name” type=”text” id=”name”/>
<form:errors path=”name”/>
</form:form>

===  2. spring:バインドとフォーム:エラー

`spring:bind`では` $ {status.error} `を使って 'name'フィールドにエラーがあるかどうかをチェックし、条件に応じて異なるCSSクラスを表示することができます。

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

エラーメッセージは `form:errors`を介して表示されますが、より多くのコントロールを得ることができます。

===  3. c:セットとフォーム:エラー

例2と同じように、 `c:set`を使って 'name'フィールドにエラーメッセージがあるかどうかを調べます。

<form:form method=”post” modelAttribute=”userForm” action=”${userActionUrl}”>
<c:set var=”nameHasBindError”>
<form:errors path=”name”/>
</c:set>

    <div class="form-group ${not empty nameHasBindError?"has-error":""}">
        <label>Name</label>
        <form:input path="name" type="text" id="name"/>
        ${nameHasBindError}
    </div>
</form:form>

この例はちょっと変わっていますが、うまくいきます。

===  4.すべてのエラーを表示する

送信されたフォームにすべてのエラーメッセージを表示するには、 `spring:hasBindErrors`を使用し、` $ {errors.allErrors} `をループします。

<spring:hasBindErrors name="userForm">
<c:forEach var="error" items="${errors.allErrors}">
    <b><spring:message message="${error}"/></b>
    <br/>
</c:forEach>
</spring:hasBindErrors>

あるいは、 `path =" **  "`

<form:form method=”post” modelAttribute=”userForm” action=”${userActionUrl}”>
<form:errors path=”** ” class=”has-error”/>
</form:form>

=== 参考文献

.  http://docs.spring.io/spring/docs/current/spring-framework-reference/html/spring.tld.html[Spring

タグ -  bindタグとhasBindErrorsタグ]。 http://w//spring-mvc/spring-mvc-form-handling-example/ww.mkyong.com/spring-mvc/spring-mvc-form-handling-example/[Spring

MVCフォームの処理例]。 link://spring-mvc/s//spring-mvc/spring-3-mvc-and-jsr303-valid-example/pring-3-mvc-and-jsr303-valid-example/[Spring

MVCとJSR 303 @正当なbean検証の例]

link://tag/jstl/[jstl]link://タグ/spring-form/[スプリングフォーム]link://tag/spring-mvc/[spring mvc]