2011-09-12 14 views
1

新しいページ値で更新するためにBeanを取得するのが苦労しています。私は自分のページに2つのサブミットボタンを持っており、どのモードが私のページにあるかのブール値に基づいて表示するものをトグルします。私のページが更新のみ(検証なし)のときは、immediate = "true" 。ページが処理モード(検証中)の場合、immediate = "true"のない送信ボタンを表示します。 私が実行している問題は、更新モード(検証なし)で入力フィールドの値がBeanに設定されていないときです。このモードでは、ページをそのまま保存して終了します。そのページの情報は、処理する準備ができていないか、必要に応じて「実際に使用する」ため、検証は必要ありません。つまり、ページがプロセスモード(検証)であれば、すべてが意図どおりに機能します。値は送信され、保存されます。JSF 2.0の値がサブミットされていません

私がしようとしていることについて特別なことは何もないので、まだコードを投稿していません。単純なゲッタ/セッタを指す値バインディングを持っているだけです。私のBeanは@ViewScopeにあります。

彼の優秀なblogspotの投稿:debug-jsf-lifecycleで、BalusCの例を使ってみました。 即時= "true"の送信ボタンをクリックすると、入力フィールドにimmediate = "true"を設定しても効果はありません。 UICommandの即時= "真"であることを理解する方法は、検証をスキップするかどうかをアプリケーションに指示するものです。入力フィールドに入力するだけで、検証がより早く行われます。何か不足していますか?

アイデア?これに関するすべての助けが大歓迎です!

アプリケーション仕様:
JSF 2.0.3
のTomcat 6.0.14

答えて

1

immediate="true"は、検証を無効にするintentedされていません。検証の優先順位付け、または入力の処理をすべてスキップすることが意図されています。記事末尾のthe summaryも参照してください。

required="false"または<f:validator disabled="true">に設定して検証を無効にする必要があります。

<h:inputText value="#{bean.value1}" required="#{bean.process}" /> 
<h:inputText value="#{bean.value2}" required="#{bean.process}"> 
    <f:validator validatorId="someValidatorId" disabled="#{!bean.process}" /> 
</h:inputText> 
... 

フィールドが必要とされていないこの方法とprocessfalseを評価するときに検証されません。ここでは、フォームの状態を表しboolean processプロパティをしたことを前提として例を示します。

+0

私は処理されていない入力の犠牲者です。なぜ私はなぜか分かりませんが、どういうわけか私の頭の中では、UICommandのimmediate = "true"はバリデーションを無効にしていましたが、単にそれらのフィールドを処理していないだけです...いつものように、BalusCに感謝します!私はあなたが忘れてしまったものの半分を知ってほしかった:) – Mickelback

+0

あなたは大歓迎です:) – BalusC

関連する問題