1

我有一个 h:selectBooleanCheckbox,我想在托管 bean 中对其进行验证,然后再允许它更改它的值。

<h:selectBooleanCheckbox id="attr" value="#{handler.attribute}" onclick="submit()" 
    immediate="true"  valueChangeListener="#{handler.changeAttributeValue}" />

public String changeAttributeValue(ValueChangeEvent event) {
    if(condition)
        attribute=false;
return "home";
}

所以我想做的是在条件为真时阻止属性变为真。发生的情况是该属性最初设置为 false,但在方法退出后它再次变为 true。

4

1 回答 1

2

小心immediate="true"。提交的值不会被你拿走,attribute而是留在selectBooleanCheckbox-组件的组件模型中,所以下次再勾选。试试immediate=false。确保您的 Managed Bean 是@SessionScoped,否则在您重新加载/重定向页面时它会忘记您的属性。

更帅:

<h:selectBooleanCheckbox id="attr" value="#{handler.attribute}">
    <f:ajax event="change" render="@this" listener="#{handler.changeAttributeValue()}" />
</h:selectBooleanCheckbox>

public void changeAttributeValue() {
if(condition)
    attribute=false;
return;
}

(无法正确检查代码,但经常使用此代码)

于 2014-10-07T13:38:29.513 回答