我有一个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。
答案 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;
}
(无法检查代码是否正确,但经常使用此代码)