0

私は icefaces 1.8.2 を使用しています。ページに HtmlBooleanCheckbox があり、特定の状況が満たされたときにチェックを外す必要があります。

ページのチェックボックスはこのようなものです

<ice:selectBooleanCheckbox id="accepttermscheckbox"
    binding="#{managedBean.termsAgreement}"
    validator="#{managedBean.validateAgreement}">
</ice:selectBooleanCheckbox>

バインドされたオブジェクトは、適切なゲッターとセッターを持つマネージド Bean のプロパティです。

private HtmlSelectBooleanCheckbox termsAgreement;

コードでチェックボックスをオンにできます。バリデーターは正常に動作し、それで行うすべてのことも問題ありませんが、サーバー側でチェックボックスをオフにする方法が見つかりません。

私は試した:

termsAgreement.setValue(Boolean.FALSE)
termsAgreement.setValue(null)
termsAgreement.setSelected(false)

しかし、何も機能しません。デバッグしても value = null と表示されますが、ページをレンダリングするとまだチェックされているように見えます。チェックしたら、ページで手動でクリックしない限り、チェックを外すことはできません。

面白いことはそれです

termsAgreement.setValue(Boolean.TRUE)

正常に動作します。

バインドされたオブジェクトでサーバー側のチェックを外す方法を教えてください。よろしくお願いします。

4

1 に答える 1

3

ICEfaces/JSF 開発者が直面する共通の問題に直面しています。

まず、JSF ライフサイクルがどのように機能するかを理解する必要があります。

以下は読みやすい記事です。

http://www.ibm.com/developerworks/library/j-jsf2/

あなたの場合、値をにバインドします<ice:selectBooleanCheckbox>

たとえばvalue="#{managedBean.termsAgreed}"

<ice:selectBooleanCheckbox id="accepttermscheckbox"
    binding="#{managedBean.termsAgreement}"
    validator="#{managedBean.validateAgreement}"
    value="#{managedBean.termsAgreed}">
</ice:selectBooleanCheckbox>

コンポーネントから値を変更しようとしないでください。常に値バインディングから値を変更します。この例では、値を変更する必要がありますtermsAgreed

action/actionListener が即時でない場合、つまりデフォルト値である `immediate="false" の場合、サーバー側で値を変更すると、チェックボックス コンポーネントがオン/オフになります。

を使用している場合は、コンポーネントでメソッドをimmediate="true"呼び出す必要があります。resetValue()HtmlSelectBooleanCheckbox

termsAgreement.resetValue();

理想的にはsetValue()、コンポーネントでメソッドを呼び出さないでください。JSFのライフサイクルを理解すれば理解できます。

これが役立つことを願っています!

于 2013-02-06T07:13:49.073 に答える