0

我正在使用 icefaces 1.8.2,并且我的页面上有一个 HtmlBooleanCheckbox,当遇到某些情况时我需要取消选中它。

页面上的复选框是这样的

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

绑定对象是托管 bean 的属性,具有适当的 getter 和 setter

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 回答