2012-01-08 8 views
5

JSF 2.0.4を使用している場合は、faces-config.xmlにカスタムバリデータを登録する必要がありますか? 私のカスタムバリデーターは、javax.faces.validator.ValidatorというValidatorインターフェースを使用しています。 JSF 2.0で必要はないコンポジットコンポーネント内の入力コンポーネントのバリデータを指定するにはどうすればよいですか?

<cc:myComp id="customcomp1" ... /> 

<cc:myComp id="customcomp2" ...> 
    <f:validator id="myvalidator" for="myComp" /> 
</cc:myComp> 

myComp.xhtml

<cc:interface> 
    <cc:attribute ... /> 
    <!-- more attributes --> 
</cc:interface> 
<cc:implementation> 
    <h:panelGroup layout="block"> 
     <h:inputText id="firstName" ... /> 
     <h:inputText id="middleName" ... /> 
     <h:inputText id="lastName" ... /> 
    </h:panelGroup> 
</cc:implementation> 
+0

カスタムコンポーネントまたはコンポジットコンポーネントを使用しているようです。あなたはそれをどのように作成したかを示す必要があります。おそらく、単にバリデーターを適切に委譲していないのかもしれません。 – BalusC

答えて

5

、バリデータを適切な入力に委譲していないように見えるので、バリデータは単に無視されます。

<composite:interface><composite:editableValueHolder>として入力する(バリデータを添付する)入力を定義する必要があります。

<cc:interface> 
    <cc:editableValueHolder name="forName" targets="inputId" /> 
    ... 
</cc:interface> 
<cc:implementation> 
    ... 
    <h:inputText id="inputId" ... /> 
    ... 
</cc:implementation> 

上記<composite:editableValueHolder>基本的に任意<f:validator for="forName"><h:inputText id="inputId">に適用する必要があることを告げます。だから、次はそれを実行する必要があります。

<cc:myComp> 
    <f:validator id="myValidator" for="forName" /> 
</cc:myComp> 

あなたもnametargetsに同じ値を使用することができますが、キーポイントは、JSFは、正確に何の入力コンポーネントに認識できるように<composite:editableValueHolder>存在がなければならないということですバリデータをターゲットにする必要があります。つまり、コンポジット内に複数の入力コンポーネントが存在する可能性があります。

+0

ありがとうございました! –

+0

ようこそ。 – BalusC

+0

あなたとChichirayのための1up。 :) –

1

号。バリデータに@FacesValidatorと注釈を付けるだけです。アノテーションは自動的にバリデーターを登録します。 xmlは必要ありません。

+0

何らかの理由で私のバリデーターが動作しません。 –

3

JSF 2を使用している場合は、顧客Validatorを作成するためにfaces-config.xmlファイルに触れる必要はありません。アノテーション@FacesValidatorを使用してValidatorと宣言するだけで簡単に使用できます。それはこのようなものでなければなりません:

@FacesValidator("myValidator") 
public class MyValidator implements Validator { 

    @Override 
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { 
     // Your logic 
    } 

} 

が次にあなたとあなたの.xhtmlページでそれを使用して起動することができ、例えば、<f:validator>タグ:あなたの更新問題のコード例を1として

<f:validator validatorId="myValidator" /> 
+0

myValidatorクラスで前述したとおりに編集しましたが、依然として呼び出されていません。 –

+0

私の質問で更新を確認してください。 –

+1

@Altair:Validatorとコンポジットコンポーネントのコードを投稿できますか? Validatorは、コンポーネント全体ではなく、単一の入力に対して登録する必要があります。 –

関連する問題