0

私は現在、JSF 2.0 アプリケーションを担当しています。このアプリケーションでは、*.xhtml ファイルを完全に破壊するカスタム バリデーターによってすべてが検証されます。検証を JSR-303 Bean 検証に移行しようとしましたが、これは正常に機能します。

JSR-303 はクラス レベルの制約を検証しないため、リクエスト フォームに少なくとも 1 つのフィールドが入力されていることを検証するカスタム バリデータを 1 つ保持したくありません。

バリデーターはすべてのフィールドに登録され、入力をチェックする必要がある他のフィールドの名前を含む文字列配列を取得します。問題は、JSR-303 がクラスパスに存在する場合、カスタム バリデータのプロパティが設定されず、他のフィールドの名前が認識されないことです。バリデーターは引き続きトリガーされますが、入力が与えられていないというメッセージが表示されます。

私はすでにログファイルの出力を見てきましたが、唯一の違いは

11:22:50,403 INFO  [Version] Hibernate Validator 4.2.0.Final
11:22:50,450 INFO  [ExternalSpecifications] MyFaces Bean Validation support enabled

それ以外の

11:02:10,472 INFO  [ExternalSpecifications] MyFaces Bean Validation support disabled

もう 1 つの違いは、JSR-303 が存在する場合に検証が初めてトリガーされたときに表示される次の出力です。

11:23:09,906 INFO  [_ExternalSpecifications] MyFaces Unified EL support disabled
11:23:09,906 INFO  [_ExternalSpecifications] MyFaces Bean Validation support enabled

JBoss 5.1 jdk6でMyFaces 2.0、Hibernate Validator 4.2を使用しています

更新

<cc:formular bean="#{bankenBean}">
        <h:outputLabel for="bankleitzahl">
            <span class="kurztaste">B</span>ankleitzahl:</h:outputLabel>
        <h:inputText id="bankleitzahl" accesskey="b" size="10" maxlength="8"
            value="#{bankenBean.bankleitzahl}">
            <audi:notEmptyValidator dependsOn="bic name ort"
                detail="Eines dieser Felder muss gefüllt sein." />
        </h:inputText>
        <h:message for="bankleitzahl" errorClass="fehlertext" />
        <h:outputLabel for="bic">B<span class="kurztaste">I</span>C:</h:outputLabel>
        <h:inputText id="bic" accesskey="i" size="12" maxlength="11"
            value="#{bankenBean.bic}">
            <audi:notEmptyValidator dependsOn="bankleitzahl name ort"
                detail="Eines dieser Felder muss gefüllt sein." />
        </h:inputText>
        <h:message for="bic" errorClass="fehlertext" />
        <h:outputLabel for="name">
            <span class="kurztaste">N</span>ame der Bank:</h:outputLabel>
        <h:inputText id="name" accesskey="n" size="35" maxlength="58"
            value="#{bankenBean.name}">
            <audi:notEmptyValidator dependsOn="bankleitzahl bic ort"
                detail="Eines dieser Felder muss gefüllt sein." />
        </h:inputText>
        <h:message for="name" errorClass="fehlertext" />
        <h:outputLabel for="ort">
            <span class="kurztaste">O</span>rt der Bank:</h:outputLabel>
        <h:inputText id="ort" accesskey="o" size="35" maxlength="35"
            value="#{bankenBean.ort}">
            <audi:notEmptyValidator dependsOn="bankleitzahl bic name"
                detail="Eines dieser Felder muss gefüllt sein." />
        </h:inputText>
        <h:message for="ort" errorClass="fehlertext" />
    </cc:formular>

これは、notEmptyValidator が使用されるポイントです。facelets.taglib.xml で定義されています。

<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib version="2.0"
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/web-facelettaglibrary_2_0.xsd">

<namespace>http://rzf.finnrw.de/audi</namespace>
<tag>
    <tag-name>notEmptyValidator</tag-name>
    <validator>
        <validator-id>de.finnrw.rzf.audi.NotEmptyValidator</validator-id>
    </validator>
    <attribute>
        <name>dependsOn</name>
        <type>java.lang.String</type>
    </attribute>
    <attribute>
        <name>detail</name>
        <type>java.lang.String</type>
    </attribute>
</tag>

JSR-303 がクラスパスに存在する場合、このカスタム バリデータは引き続き登録され、トリガーされます。ただし、プロパティが設定されていないため、チェックする必要があるフィールドを認識していません。

4

0 に答える 0