在页面刷新

时间:2017-03-26 20:03:08

标签: jsf primefaces

在页面上我有一个复选框,它启用/禁用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值,文本框被禁用,菜单已启用):

First Image

正确:用户取消选中复选框(未选中复选框,bean上的值也为false,文本框已启用,菜单已禁用):

Second Image

ISSUE:取消选中用户刷新页面后。 bean上的值为true,但仍未选中复选框。此外,文本框和菜单已启用。

Third Image

1 个答案:

答案 0 :(得分:-1)

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

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

必须在&lt; h:表格/&gt;使行动生效。

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

希望我可能会有所帮助。