本当に基本的なもの (EAR または EAR 構成でのクラスのロードに関連) が欠けています。JSR 303 検証と Hibernate 検証が EAR 内からトリガーされない理由がわかりませんでした...新しい WAR プロジェクトを作成するとトリガーされます。
Weblogic Server 10.3 で Maven、JSF 2.0、Open-JPA、EJB 3.0 を使用して新しいプロジェクトをセットアップしています。Maven アーキタイプを使用してすべてのプロジェクトを作成しました。次のような構造の最終的な EAR ビルドがあります。
- PROJName
- ejb
- ウェブ
- ライブラリ
- メタINF
Web では、依存関係を持つ TestMPB 変数と pom にマップされた with フィールドとフィールドがあります: validation-api 1.0.0.GA、hibernate-validator 4.2.0.Final…</
login.xhtml
p userName
>Password
ページ バッキング Bean (TestMPB) 変数には@Pattern
および@NotEmpty
アノテーションがありますが、JSF 検証フェーズによってトリガーされることはありません。JSF 検証は正常に機能しますが、JSR 303 および Hibernate 検証を使用したいと考えています。
login.xhtml
次の行が含まれています。
<h:messages layout="table" showDetail="false" showSummary="true"/>
<h:inputText class="textbox" id="userId" value="#{testMPB.userId}"></h:inputText>
<h:commandButton id="button" action="#{testMPB.login}" value="Login" ></h:commandButton>
TestMPB には以下が含まれます。
@Pattern(regexp = "^(?=.*[a-zA-Z])[a-zA-Z0-9_]{2,15}\\s*$", message = "userId invalid")
@NotEmpty(message = "userId empty")
private String userId = "";
public String login(){ System.out.println("User Login ::"+getUserId());
return "/web/ui/s/home/home.xhtml";
}
Application.xml に含まれるもの
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" version="5">
<display-name>ear</display-name>
<module>
<web>
<web-uri>web</web-uri>
<context-root>/NewAccountsWeb</context-root>
</web>
</module>
<module>
<ejb>ejb</ejb>
</module>
<library-directory>lib</library-directory>
</application>
デバッグのために、次のことを確認しました。
- JSF マネージド ページ Bean (TestMPB) は、ページの読み込み時に初期化されます (コンストラクターに SOP を追加することにより)。
- ページ送信時に、メソッドが呼び出され、userName 値が出力されます。
- POM に追加された JAR の依存関係は正しく、最終的な EAR ビルドに存在します。
- WAR プロジェクトを作成すると、同じ JSR 303 と Hibernate の検証が同じセットの
login.xhtml
TestMPB.java で機能します。 - フェーズリスナーを作成し、すべてのフェーズを出力して、フェーズが呼び出されることを確認しました。
- テストのために、JSF 検証 (
required=true
) も追加しました。これは機能し、h:message にメッセージを表示します。
この問題を解決できる何か考えられますか?