我有一个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。
发布于 2014-10-07 21:38:30
小心使用immediate="true"。提交的值不会被您的组件接受,而是保留在selectBooleanCheckbox- attribute的组件模型中,因此下次将再次选中该框。试试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;
}(我不能检查正确的代码,但经常使用它)
https://stackoverflow.com/questions/26236719
复制相似问题