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