我有两种形式:一种用于定义一些过滤器设置(ajax),并带有通过 action="null" 重新加载页面的 sumbit 按钮,另一种带有执行 ajax 侦听器“#{bean.activate}”的单个命令按钮的表单:
<h:form id="settingsForm">
<h:selectBooleanCheckbox value="#{bean.boolean1}" id="bool1">
<f:ajax event="click" render="@all" execute="bool1"/>
</h:selectBooleanCheckbox>
<ui:repeat var="step" value="#{bean.availableSteps}">
<h:commandLink action="#{bean.navigate(step)}">
<h:outputText value="#{step.name}" />
</h:commandLink>
</ui:repeat>
</h:form>
<h:form id="activateForm">
<h:commandButton value="set activate bool and rerender" >
<f:ajax event="click" execute="@form" render="@all" listener="#{bean.activate}"/>
</h:commandButton>
</h:form>
问题如下:
当我更改复选框(支持 bean 中的布尔值)并单击相同表单中的提交按钮时,仅保留以相同表单设置的更改(在支持 bean 中)。
当我执行第二个表单(bean.activate)时,它会重新渲染(显示更多信息),但是当我提交第一个表单时,第二个表单的更改会丢失(但它们正在同一个 bean 上工作)。我希望它还记得以第二种形式设置的变量......
似乎其他表单设置的值没有持久化,因为当我执行表单提交时,第二个表单的 ajax 存储的所有“信息”都丢失了。
例如
boolean boolean1 = false; //set by form 1
boolean show = false; //set by form 2 (ajax)
public void activate(Ajaxbehaviour...){ show = true; }
默认情况下应该只有一种形式吗?似乎两种形式(一种大,一种只是通过ajax设置变量)太多了......