【发布时间】:2017-08-19 10:07:17
【问题描述】:
在页面上我有启用/禁用 h:inputText 和 h:selectOneMenu 的复选框。在我刷新页面之前效果很好。复选框的值可能被浏览器缓存。
因此,当复选框在刷新后设置为“真”时,两个控件都会启用。 selectOneMenu 对应于 init() 方法中设置的值呈现,但 selectBooleanCheckbox 和 inputText 不是。我该如何解决?我用的是火狐浏览器。
Backing bean 很简单,一个属性和一个方法 - init 中的值设置为 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,启用文本框,禁用菜单):
问题:取消选中用户刷新页面后。 bean 上的值为 true,但复选框仍未选中。此外,文本框和菜单都已启用。
【问题讨论】:
-
您是否尝试过使 bean 会话作用域?
-
感谢您的回答。添加了一些截图。 SessionScoped bean 提供相同的效果。
标签: jsf primefaces