3

我对 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 和一个名为 realBad 的布尔值。ListBean 返回列表中的枚举值以填充 selectOneMenu。

基本上,当我选择 BAD 时,会呈现布尔复选框的面板,我可以在其中打勾以表示一个人真的很糟糕。如果我愿意,我可以提交表格。问题是当我勾选复选框然后再次选择 NICE 时,即使未呈现复选框,它仍会被勾选。所以当我提交我的表格时,这个人可能很好,也很糟糕,这没有任何意义。

与其必须再次选择不好的方法来取消选中框,不如是我可以将复选框及其输入值重置为false时的一种方式吗?我对 JSF 的 ajax 有点陌生!谢谢。

附言。我正在使用 commandButtons 操作在提交时打印两个输入的值以验证结果...

4

1 回答 1

1

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

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

顺便说一句,<f:ajax event>您在代码中的两个值已经是默认值。只是省略它们。

于 2013-02-26T12:12:41.520 回答