2

本当に基本的なもの (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.xhtmlp 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.xhtmlTestMPB.java で機能します。
  • フェーズリスナーを作成し、すべてのフェーズを出力して、フェーズが呼び出されることを確認しました。
  • テストのために、JSF 検証 ( required=true) も追加しました。これは機能し、h:message にメッセージを表示します。

この問題を解決できる何か考えられますか?

4

1 に答える 1

1

私は自分でこの問題を解決することができました...

プロジェクトのクラスパスに slf4j-log4j12 1.6.4 jar を追加すると、bean と hibernate の両方のフィールドレベル検証が機能し始めました... jboss-logging-3.1.0.GA.jar も機能する可能性があります... Log4j jar もすでにクラスパスにあります。

ロギングの目的で、Hibernate Validator は、いくつかのロギング ソリューションを実装としてサポートする抽象レイヤーであるロギング API を使用しているようです。したがって、サポートされているロギング ライブラリをクラスパスに追加するだけで、ロギングはすべてのログ リクエストをそのプロバイダに委任します。

サーバーログまたはコンパイル時にエラーがなかったこと、Hibernate (または Bean JSR 303) 検証のログ依存関係が欠落していることは奇妙です... 3 日間無駄にしましたが、現在は機能していることを嬉しく思います。 ..

于 2013-02-12T15:08:52.010 に答える