Spring MVCフレームワークの下で validators を書き込もうとしていますが、ドキュメントに明白な省略があります。 Errors オブジェクトにエラーを渡して呼び出す場合、ほとんどのメソッドはerrorCodeという名前のStringパラメーターを予期します。これらのerrorCodesは、私が正しく理解していれば、特定のエラーメッセージの代用として機能します。しかし、私はこれらのコードがどこにマップされているかを一生理解することはできません。
これは、SpringMVCのJavadocから参照しているものの例です。
public class UserLoginValidator implements Validator {
private static final int MINIMUM_PASSWORD_LENGTH = 6;
public boolean supports(Class clazz) {
return UserLogin.class.isAssignableFrom(clazz);
}
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "userName", "field.required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "field.required");
UserLogin login = (UserLogin) target;
if (login.getPassword() != null
&& login.getPassword().trim().length() < MINIMUM_PASSWORD_LENGTH) {
errors.rejectValue("password", "field.min.length",
new Object[]{Integer.valueOf(MINIMUM_PASSWORD_LENGTH)},
"The password must be at least [" + MINIMUM_PASSWORD_LENGTH + "] characters in length.");
}
}
}
誰かが私を啓発できますか?
デフォルトのメッセージリゾルバーを使用しています。
私のdispatcher-servlet.xml
、 私が持っています
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages" />
</bean>
次に、クラスディレクトリの最上位に、次のようなマッピングを含む「messages.properties」というテキストファイルがあります。
error.firstname.null=Please enter your first name.
error.lastname.null=Please enter your last name.
カスタムMessageCodesResolverを使用する場合は、MessageCodeResolverインターフェイスを実装してから、次のように特定のコントローラーのリゾルバーを定義できます。
<bean id="myController">
<property name="messageCodesResolver" ref="myMessageCodesResolver" />
</bean>
現在、カスタムMessageCodeResolver
をグローバルに定義する方法はありません。 ここにそのための拡張要求 があります。 Bean継承を使用してすべてのコントローラーBeanを1つのコントローラーBean定義から継承させる1つのアプローチについて説明します ここ 。
それらはあなたの MessageSource と MessagesCodeResolver によって解決されます。
ここ はリファレンスマニュアルの関連セクションです:
検証エラーに対応するメッセージを出力することは、私たちが議論する必要がある最後のことです。上に示した例では、名前と年齢フィールドを拒否しました。
MessageSource
を使用してエラーメッセージを出力する場合は、フィールドを拒否するときに指定したエラーコード(この場合は「name」と「age」)を使用して出力します。 (直接または間接的に、たとえばValidationUtils
クラスを使用して)rejectValue
またはErrors
インターフェイスから他の拒否メソッドの1つを呼び出すと、基礎となる実装は渡したコードだけでなく、いくつかの追加のエラーコードも登録します。
何らかの理由で、form:errors jspタグと同様にコントローラー内のメッセージを解決したい場合は、次のようにすることができます。
//result is BindingResult
List<String> errors = new ArrayList<String>();
List<ObjectError> allErrors = result.getAllErrors();
for (ObjectError error : allErrors) {
String message = messageSource.getMessage(error, null);
errors.add(message);
}