5

1 つが失敗したときに他のバリデーターの実行を停止できるかどうかを知りたいですか?

このように注釈が付けられた豆があります

import org.hibernate.validator.constraints.*;

/*...*/

@NotBlank(message = SignupForm.NOT_BLANK_MESSAGE)
@Email(message = SignupForm.EMAIL_MESSAGE)
private String email;

@NotBlank(message = SignupForm.NOT_BLANK_MESSAGE)
@Length(min = 6, message = SignupForm.PASSWORD_LENGTH_TOO_SHORT_MESSAGE)
private String password;

そして、ここに私のJSPがあります

<form:label path="email"><s:message code="email" /></form:label>
<form:errors path="email" element="div" class="text-error"/>
<form:input path="email" class="input-block-level" placeholder="Email address" />

<form:label path="email2"><s:message code="repeat_email" /></form:label>
<form:errors path="email2" element="div" class="text-error"/>
<form:input path="email2" class="input-block-level" placeholder="Email address" />

<form:label path="password"><s:message code="password" /></form:label>
<form:errors path="password" element="div" class="text-error"/>
<form:password path="password" class="input-block-level" placeholder="Password" />

<form:label path="password2"><s:message code="repeat_password" /> </form:label>
<form:errors path="password2" element="div" class="text-error"/>
<form:password path="password2" class="input-block-level" placeholder="Password" />

今-私のページで、空のフォームを送信しようとすると、

E-mail
The value may not be empty!

Password
Password must be at least 6 characters long
The value may not be empty!

フィールドの場合password、両方のバリデータからエラーが発生します。これは非常に望ましくありません。フィールドの場合、email空の文字列は有効な電子メール アドレス (?!) であることを理解しています。そのため、一度に 1 つのメッセージしか取得できません。

指定された順序で検証を実行し、最初の失敗後に処理を停止するか、最初のメッセージのみを取得することは可能ですか?

4

2 に答える 2

0

Bean Validation 仕様では、順序付けられた検証を定義するグループ シーケンスが定義されています。パスワード電子メールのシーケンスを定義し、値を検証するときに、正しいグループ シーケンスをバリデーターに渡す必要があるという考えです。ただし、JSFで適切なグループをどのように指定/ターゲットにするかはわかりません。

問題をより具体的にするには、単一の@Pattern制約を使用して制約を表現するか、カスタム@Password制約を記述します。後者の場合、制約合成と@ReportAsSingleViolationを活用できます。

于 2013-03-14T10:21:25.737 に答える