14

jsp taglibs を使用した単純な Spring 3 MVC フォームがあります。フォーム内のフィールドに関連するエラーがあるかどうかに基づいて、クラスを追加する必要があります。ここに私のHTMLのスニペットがあります:

<div class="control-group error"> <!-- HERE: binding.hasErrors() ? "error" : "" -->
    <form:label path="username" cssClass="control-label">User Name</form:label>
    <div class="controls">
        <form:input path="username" cssClass="span3"/>
        <form:errors path="username" cssClass="help-inline" />
    </div>
</div>

したがって、最初の行の class 属性には、「control-group」と「error」の 2 つのクラスがあります。そのフィールドにエラーが関連付けられている場合にのみ、エラー クラスを追加する必要があります。WebDataBinder が何らかの形でページに含まれていることは知っていますが、アクセスする方法がわかりません。基本的に、古き良きファッションを実行したいだけです <%= binding.hasError() ? "error" : "" %> ですが、ページ内のバインダーにアクセスするにはどうすればよいですか?

4

3 に答える 3

15

タグを試しましたか<spring:hasBindErrors>(「フォームtaglibを使用せずに」と書いている意味がわかりません)?

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

<spring:hasBindErrors name="yourCommandName">
  <c:if test="${errors.hasFieldErrors('username')}">
    <c:set var="errorClass" value="error" />
  </c:if>
</spring:hasBindErrors>

<div class="control-group <c:out value='${errorClass}' />">

コメントの後に編集:

<spring:hasBindErrors>タグ内には、実際のバインディング エラーにバインドされたerrors変数 (Errorsインターフェイスを参照) があります。を介してフィールドにエラーがあるかどうかを確認できますerrors.hasFieldErrors(fieldName)


そして、タグなしでフィールドエラーを取得する本当にあいまいな方法はrequestScope['org.springframework.validation.BindingResult.yourCommandName'].hasFieldErrors('username')...

于 2012-08-30T20:47:22.310 に答える
12

これはもう少しわかりにくいですが、1行なので、正気のJava開発者のようにスクリプレットを使用した場合のようになります。Taglibsは、死ぬ、死ぬ、そしてもう少し死ぬ必要があります。それらは恐ろしいものであり、Java開発者がまだ実際に役立つと思っており、私たちの完全な時間を無駄にしないとは信じられません。PHP開発者は、私たちがそれらを使用するときに私たちを笑います。

<div class="control-group ${requestScope['org.springframework.validation.BindingResult.user'].hasFieldErrors('firstName') ? 'error' : ''}">
于 2012-08-31T01:29:28.960 に答える
4

エラーメッセージを取得するより良い方法があります

<spring:hasBindErrors name="yourCommandName">
    ${errors.hasFieldErrors('userId') ? errors.getFieldError('userId').defaultMessage : ''}
</spring:hasBindErrors>

そしてワンライナー

 ${requestScope['org.springframework.validation.BindingResult.user'].hasFieldErrors('emailId') ? requestScope['org.springframework.validation.BindingResult.user'].getFieldError('emailId').defaultMessage : ''}
于 2015-02-13T15:21:08.560 に答える