JSF Ajax重置以前呈现的输入组件值?

时间:2013-02-26 09:40:07

标签: ajax jsf

我对JSF和ajax有一个小问题(但很重要)。表格在这里:

 <h:form>
        <h:panelGrid id="pg1" columns="2">

            <h:outputText value="Type: "/>

            <h:selectOneMenu id="selectOne" value="#{personBean.type}">
                <f:selectItems value="#{listBean.personTypes}"/>
                <f:ajax event="valueChange" render="pg2"/>
            </h:selectOneMenu> 

        </h:panelGrid>

        <h:panelGrid id="pg2" columns="2">

            <h:outputText value="Really bad?" rendered="#{personBean.type=='BAD'}"/>

            <h:selectBooleanCheckbox id="checkbox" value="#{personBean.reallyBad}" rendered="#{personBean.type=='BAD'}">
                <f:ajax event="click"/>
            </h:selectBooleanCheckbox>

        </h:panelGrid>

        <h:commandButton value="Ajax Submit" action="#{personBean.printValues}">
            <f:ajax execute="@form"/>
        </h:commandButton>
    </h:form>

PersonBean是一个简单的bean,其枚举PersonType有两个值:NICE,BAD和一个名为reallyBad的布尔值。 ListBean返回列表中的枚举值以填充selectOneMenu。

基本上,当我选择BAD时,将显示布尔复选框的面板,我可以在其中勾选它以表示某个人是真的。如果我愿意,我可以提交表格。问题是当我勾选复选框然后再次选择NICE时,即使没有渲染,复选框仍然会被勾选。因此,当我提交表格时,这个人可能是NICE和真棒,这是没有意义的。

当选择NICE时,我可以将复选框及其输入值重置为false,而不是必须再次选择BAD来取消选中该复选框吗?我和JSF的ajax有点混蛋!感谢。

PS。我使用commandButtons操作打印提交的两个输入的值以验证结果...

1 个答案:

答案 0 :(得分:1)

更改菜单时,您需要手动清除该复选框。

<f:ajax listener="#{personBean.setReallyBad(false)}" render="pg2" />

顺便说一下,代码中的<f:ajax event>值都是默认值。只是省略它们。