JSF管理BeanでHibernate Validationアノテーションを使用しています。 @NotNull
、@NotBlank
、または@NotEmpty
を使用する場合、それらは決してトリガーされないようです。
@NotBlank(message = "{name.required}")
public String name;
見る:
<h:outputLabel value="Name:" />
<h:inputText id="name" value="#{person.name}" size="20" />
<h:message for="name" style="color:red" />
これはどのように引き起こされ、どうすれば解決できますか?
どのコンテナを使用しているのかという質問に対する私のコメントに対するフィードバックを提供しなかったため、質問履歴を覗いて、どのコンテナを使用しているかを確認しました。これまでのところ、 Tomcat のみが見つかりました。したがって、この回答では、コメントを投稿するときに最初に推測したとおり、実際にTomcatを使用していると仮定します。
Tomcatには、JSR303 Bean Validation API /実装はそのままでは出荷されていません。 ダウンロードしてインストール する必要があります。コンパイルするためにこれらの注釈を取得したということは、Webアプリケーションの_hibernate-validator.jar
_フォルダーに_/WEB-INF/lib
_ファイル(バージョンごとに名前が異なる場合があります)を正しくドロップしたことを意味します。これらの注釈が順番に機能しないように見えるということは、_readme.txt
_を読んでいなかったこと、および/またはHibernate ValidatorライブラリZipの_/lib/required
_フォルダーからJARを追加するのを忘れたことを意味します。/tgzファイル:_slf4j-api.jar
_および_validation-api.jar
_。最後のアノテーションは、アノテーションを実際に機能させるために必須です。そのため、TomcatでHibernate Validatorを機能させるには、webappの_/WEB-INF/lib
_に次のJARが必要です。
validation-api.jar
_(抽象APIと注釈スキャナーを含む)hibernate-validator.jar
_(具体的な実装を含む)slf4j-api.jar
_(そのロガーを機能させるためだけに)このように _@NotBlank
_ および _@NotEmpty
_ が機能する必要があります。 _@NotNull
_ は特別な注意に値します。空の入力フィールドは、HTTP要求パラメーターの性質上、デフォルトでクライアント(webbrowser)から空の文字列として受信されます。空の文字列はnull
と同じではないため、 _@NotNull
_ はデフォルトでは起動しません。ただし、JSFはnull
として解釈するように設定可能です。次のコンテキストパラメータを_web.xml
_に追加するだけです。
_<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
_
このように _@NotNull
_ も機能する必要があります。
stillが機能しない場合(つまり、3つの注釈が機能しないが、 @Size(min=5)
のような他のアノテーションが5の最小長で正常に機能する場合)、次に、_web.xml
_に次のコンテキストパラメータがある可能性が高くなります。
_<context-param>
<param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
<param-value>false</param-value>
</context-param>
_
その後、それを削除するか(デフォルトはauto
、つまりJSR303 Bean Validation APIがランタイムクラスパスで見つかった場合のみ)、またはtrue
に設定する必要があります。
実際にBVが何も機能せず、 _@Size
_ 、 _@Pattern
_ なども機能しない場合は、notフォームには次のものがあります:
_<f:validateBean disabled="true" />
_
次に、それを削除するか(デフォルトで起動します)、または_disabled="false"
_を設定します。
BV stillが機能しない場合、2.2.3から2.2.6の間に古いMojarraバージョンを使用していないかどうかを確認します。これらのバージョンには、TomcatとクローンのBean Validationが完全に見えないようにするクラスローディングデリゲートバグがありました。これは Mojarra issue 318 として報告され、Mojarra 2.2.7で修正されました。
同様の問題があり、web-inf
libに以下の3つのjarを含めることで問題を克服できました。 Zipファイルで提供されているhibernateバリデーターjarと必要なjarを追加するだけです。
hibernate-validator-4.3.0.Final.jar
jboss-logging-3.1.0.CR2.jar
validation-api-1.0.0.GA.jar