我对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操作打印提交的两个输入的值以验证结果...
答案 0 :(得分:1)
更改菜单时,您需要手动清除该复选框。
<f:ajax listener="#{personBean.setReallyBad(false)}" render="pg2" />
顺便说一下,代码中的<f:ajax event>
值都是默认值。只是省略它们。