Jsf 设置页面刷新时selectBooleanCheckbox的值

Jsf 设置页面刷新时selectBooleanCheckbox的值,jsf,primefaces,Jsf,Primefaces,在第页,我有一个复选框,用于启用/禁用h:inputText和h:SelectOne菜单。在我刷新页面之前,它可以正常工作。复选框的值可能由浏览器缓存 因此,当刷新后将复选框设置为“true”时,两个控件都被启用。selectOneMenu对应于init()方法中设置的值呈现,但selectBooleanCheckbox和inputText不对应。我怎样才能解决这个问题?我使用Firefox浏览器 支持bean很简单,一个属性和一个方法init,其中的值设置为false @ManagedBean

在第页,我有一个复选框,用于启用/禁用h:inputText和h:SelectOne菜单。在我刷新页面之前,它可以正常工作。复选框的值可能由浏览器缓存

因此,当刷新后将复选框设置为“true”时,两个控件都被启用。selectOneMenu对应于init()方法中设置的值呈现,但selectBooleanCheckbox和inputText不对应。我怎样才能解决这个问题?我使用Firefox浏览器

支持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,但复选框仍处于未选中状态。此外,文本框和菜单都已启用


嘿,我不太明白你的问题,但我想指出两点

<f:metadata>
<f:viewAction action="#{newBean.init()}"></f:viewAction>
</f:metadata>

必须采用才能使操作生效

另外,如果希望在创建视图的新实例之前使方法init生效,请添加注释@PostConstruct,或者简单地将代码 “booleanValue=true;”在视图的构造函数中


希望我能帮上忙。

您是否尝试将bean会话限定在范围内?谢谢您的回答。添加了一些截图。SessionScoped bean也有同样的效果。答案是触摸。无论如何,在Red Hat JBoss Developer Studio 9.0.0.GA下工作时,我假设所有要生效的操作都必须在感谢您更正答案中。