在页面上我有一个复选框,它启用/禁用h:inputText和h:selectOneMenu。这工作正常,直到我刷新页面。复选框的值可能是由浏览器缓存的。
因此,当复选框设置为" true"刷新后两个控件都启用。 selectOneMenu呈现对应于init()方法中设置的值,但selectBooleanCheckbox和inputText不是。我该如何解决这个问题?我使用Firefox浏览器。
Backing bean很简单,一个属性和一个方法 - init,其中value设置为false。
@ManagedBean(name="newBean")
@ViewScoped
public class NewBean implements Serializable {
private boolean booleanValue;
public NewBean() {
}
public void init()
{
booleanValue = true;
}
public boolean isBooleanValue() {
return booleanValue;
}
public void setBooleanValue(boolean booleanValue) {
this.booleanValue = booleanValue;
}
}
页面来源:
<h:body>
<f:metadata>
<f:viewAction action="#{newBean.init()}"></f:viewAction>
</f:metadata>
<h:form>
<h:outputText value="#{newBean.booleanValue}"></h:outputText>
<br/>
<h:selectBooleanCheckbox value="#{newBean.booleanValue}" id="selected">
<f:ajax event="change"
render="enabledInput disabledInput enabledMenu"></f:ajax>
</h:selectBooleanCheckbox>
<br/>
<h:inputText disabled="#{newBean.booleanValue}" id="enabledInput"></h:inputText><br/>
<h:selectOneMenu disabled="#{!newBean.booleanValue}" id="enabledMenu">
<f:ajax></f:ajax>
</h:selectOneMenu>
</h:form>
</h:body>
编辑:添加了一些截图,以便更容易理解问题。
正确:用户打开的页面(选中复选框,它对应于bean值,文本框被禁用,菜单已启用):
正确:用户取消选中复选框(未选中复选框,bean上的值也为false,文本框已启用,菜单已禁用):
ISSUE:取消选中用户刷新页面后。 bean上的值为true,但仍未选中复选框。此外,文本框和菜单已启用。
答案 0 :(得分:-1)
嘿,我不太明白你的问题,但我想指出两件事。
<f:metadata>
<f:viewAction action="#{newBean.init()}"></f:viewAction>
</f:metadata>
必须在&lt; h:表格/&gt;使行动生效。
如果您希望方法init在创建视图的新实例之前生效,请添加注释 @PostConstruct 或简单地放置代码 “booleanValue = true;”在视图的构造函数中。
希望我可能会有所帮助。