1

我有两种形式:一种用于定义一些过滤器设置(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设置变量)太多了......

4

0 回答 0