防止selectBooleanCheckbox更改值

时间:2014-10-07 13:04:00

标签: jsf jsf-2 selectbooleancheckbox

我有一个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。

1 个答案:

答案 0 :(得分:2)

小心immediate="true"。提交的值不会被attribute占用,但会保留在selectBooleanCheckbox - 组件的组件模型中,因此下次再次检查该框。试试immediate=false。请确保您的托管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;
}

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