2012-01-01 7 views
0

私は、JSF 2.0の時点で、valueパラメータがnullの条件を適切に処理するためにバリデータ・ルーチンが必要であると読んでいます。 selectBooleanCheckbox:バリデーションで実際にnullをチェックする必要はありますか?

public void validateTandC(FacesContext context, UIComponent source, Object value) { 
    if (value == null || !(value instanceof Boolean)) { 
     FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, 
       "Terms and Conditions Not Accepted", "Value Not Present"); 
     throw new ValidatorException(fm); 
    } 
    if (((Boolean) value) != true) { 
     FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, 
       "Terms and Condistions Not Accepted", 
       "You must check the box that confirms you accept the Terms and Condtions "); 
     throw new ValidatorException(fm); 
    } 
} 

これは、このメソッドはONLY関連するページにのみ単一hから参照されることを考えると、かなり退屈な構造である。だから、僕はこのようになります。このvalidateメソッドを書きました。その場合、最初ののステートメントが真実に解決された場合、なぜですか?私はそれを持っていない場合、NPEは現実に起こるだろうか? valuenull場合

+0

関連:[必須チェックボックスの検証](http://balusc.blogspot.com/2008/09/validate-required-checkbox.html)。 – BalusC

答えて

2

を実際問題として、 <h:selectBooleanCheckbox>コンポーネントにバインドされたプロパティはnullになることはありません。チェックボックスをオフにすると、falseになり、その逆もあります。したがって、Validatornullを確認する必要はありません。

はまた、他のUIInputコンポーネントについて、私はあなたが単純に自動的に処理されますtruenullケースに自分のrequired属性を設定することができると信じて。例えば、ユーザは、上記のテキストボックスを逃した

<h:inputText id="myInput" required="true" requiredMessage="Hey yo! Type something here." /> 
<h:message for="myInput" /> 

場合は、彼が提出クリックした後Hey yo! Type something here.メッセージが表示されます。

+0

これは私が探していた "検証"(馬鹿を意図していない)でした。私は必要な属性についてはわかりません。 = "true"とバリデーター= "#{bean.myValidator}"が必要だったとき、私は理解できない振る舞いで終わった。私はあまりそれを見ていないが、私は再び土地の外観に戻ってきます。 – AlanObject

+0

@AlanObject 'required 'と' validator'属性は、お互いに何のトラブルも与えてはいけません。とにかく、何か問題があればいつでも新しい質問を作成できます:)。 –

1

、次いで!(value instanceof Boolean)truenullBooleanのインスタンスではない)が返されます。

だから、機能を変更したり、NPEを心配することなく、あなたの小切手のvalue == null部分を排除するために、これを簡素化することができます - あなたの「退屈な建設を」排除:

if (!(value instanceof Boolean)) { 
+0

あなたはそれについて正しいです。私は悪い習慣から重複している私の声明に多くの句を入力することになります。 – AlanObject

関連する問題