4

キャンセル ボタンを使用して、データ テーブル内の入力テキスト フィールドをリセットしようとしています。私が抱えている問題は、キャンセルしようとして検証エラーが発生した場合、最初に検証を行い、エラーを見つけてエラーを出力し、再レンダリングする前にエラーを出力するため、キャンセルできないことです。

明白な解決策は、ボタンに "immediate=true" を設定することです。これにより問題が解消され、検証なしでキャンセルできますが、フィールド自体は元の値に設定されていません。これは、immediate が true に設定されているため、コンポーネント自体がバッキング Bean からデータを再取得しないためです。

これは、この記事で非常によく説明されています: http://wiki.apache.org/myfaces/ClearInputComponents

この記事には多くの解決策が示されていますが、どれも私にはうまくいきません。

  • 同じページにとどまらなければならないので、ビューを変更することはできません。
  • キャンセルした「行」だけをリセットしたいので、ページ上のすべての入力フィールドの値をリセットできません
  • コンポーネントを入力フィールドにバインドできないようです。これは、入力フィールド自体の「バインディング」属性が 'var' 変数を参照できないためです。たとえば、次の「バインディング」属性は不正であり、エラーが発生します。

    <ice:dataTable id="poolSharesTbl" var="node" value="#{poolSharesManager.nodeModel}" ... <ice:column> <ice:inputText binding="#{node.inputTextBinding}" ...

これは、「var」がリクエスト スコープのみであることに関係している可能性があります。

とにかく、これを機能させる方法について誰かアイデアがありますか?

4

2 に答える 2

4

It's a pain to do so with JSF. You have very little control over the validation. Your best bet is using JavaScript to reset the values. It's done in only a few lines (or an oneliner with jQuery) instead of tens up to with hundred which you would do to workaround this the jsfish way.

于 2010-02-23T11:40:52.740 に答える
0

いずれにせよ、検証を手動で行い、inputtext 値 (デフォルトでは文字列) を整数に変換するのに、多かれ少なかれ約 50 行のコードしか必要としない回避策を使用することになりました。以前、javascript と JSF (Woodstock ライブラリ) を混在させて悪い経験をしたので、環境に再度導入するのが怖いです;)

于 2010-02-25T05:11:16.230 に答える