0

複合コンポーネントのクロスフィールド検証を実装するにはどうすればよいですか? 私が使用している複合コンポーネントは入力テキスト ボックスです (1 つは電子メール用、もう 1 つは電子メールの確認用)。confirmEmail コンポーネントに f:validator タグを適用しました。validate メソッドでメール複合コンポーネントの値を取得する方法。UIComponent または UINamingContainer ですか?

4

2 に答える 2

0

上記のようにvalidateメソッドを実装しました。私のコードの問題は、複合コンポーネントでf:validateタグをどこで使用するかということだと思います。

<eg:inputText id="confirmEmail" value="backingbean.email"/>

<eg:inputText id="email" value="backingbean.email">
<f:validator validatorId="core.jsf.CompareValidator" for="inputText"/>
</eg:inputText>

しかし、フォームを送信しても、バリデーターが呼び出されていません。バリデーターをコンポーネントにラップする必要がありますか、それともこれが正しい実装方法ですか。

于 2011-03-25T01:19:52.970 に答える
0

技術的には、コンポジットは UINamingcontainer ですが、どのコンポーネントもその子を見つけることができます。

次のようなものが機能するはずです

public void validate(FacesContext context, UIComponent component, Object value) {
    UIInput first = (UIInput)component.findComponent("compositesFirstInputID");
    UIInput second = (UIInput)component.findComponent("compositessecondInputID");

    Object firstEntry = first.getSubmittedValue();
    Object secondEntry = second.getSubmittedValue();
    if(!firstEntry.equals(secondEntry))
        throw new ValidatorException(...);
}

null チェック、おそらくは trim() を追加して、equlasIgnoreCase を使用することをお勧めします。

于 2011-03-23T21:58:58.020 に答える