1

Bean を新しいページの値で更新するのに苦労しています。ページに 2 つの送信ボタンがあり、ページのモードのブール値に基づいて表示するボタンを切り替えます。ページが更新のみの場合 (検証なし)、immediate="true" を持つ送信ボタンを表示します。 . ページが処理モード (検証) の場合、immediate="true" を持たない送信ボタンを表示します。私が直面している問題は、更新モード (検証なし) のときに、入力フィールドの値が Bean に設定されていないことです。このモードでやりたいことは、ページをそのまま保存して終了することだけです。そのページの情報は処理する準備ができていないか、必要に応じて「実際に使用する」ことができないため、検証は必要ありません。つまり、ページがプロセス モード (検証) の場合、すべてが意図したとおりに機能します。値が送信され、保存されます。

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

BalusC の優れたブログスポット投稿debug-jsf-lifecycleの例を使用してみました。入力フィールドに immediate="true" を設定しても、immediate="true" で送信ボタンをクリックしても影響はありません。とにかく、私が理解している方法は、 UICommand の immediate="true" であり、検証をスキップするかどうかをアプリケーションに指示するものです。入力フィールドに配置すると、検証がより早く行われます。何か不足していますか?

何か案は?これに関するすべての助けをいただければ幸いです。

アプリの仕様:
JSF 2.0.3
Tomcat 6.0.14

4

1 に答える 1

1

immediate="true"は、検証を無効にすることを意図したものではありません。検証を優先するか、入力の処理を完全にスキップすることを意図しています。記事の下部にある概要も参照してください。

required="false"またはを設定して検証を無効にする必要があります<f:validator disabled="true">boolean processフォームの状態を表すプロパティがあると仮定した例を次に示します。

<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>
...

このように、フィールドは必須ではなく、process評価時に検証されませんfalse

于 2011-09-13T01:06:21.957 に答える