JSF 渲染的方法没有被第二次调用

JSF rendered method is not invoked in the second time

我有下一个a4j:jsFunction

<a4j:jsFunction name="renderOnBusinessErrorEvent" execute="@none" bypassUpdates="true" immediate="true"
            render="securityForm">
        </a4j:jsFunction>

和内部带有一些对话框的 JSF 表单

<h:form id="securityForm">
      <h:panelGroup rendered="#{someCondition}">
      ......
      </h:panelGroup>
    </h:form>

在我的业务逻辑中,它必须因此执行两次。第一次一切都很好。 Rendered 方法被调用,预期的对话框出现在页面上。第二次未调用渲染方法,但模型已更改,我希望页面上不会出现该对话框。我认为这是一些 richfaces 问题,我尝试使用 f:ajax

<a4j:jsFunction name="renderOnBusinessErrorEvent" execute="@none" bypassUpdates="true" immediate="true">
            <f:ajax event="begin" render=":securityForm"/>
        </a4j:jsFunction>

但没有成功。第二次渲染的方法仍然没有被调用。它是什么?一些 JSF 优化或错误?解决方法是什么? JSF 版本 2.1.19

问题出在<h:panelGroup rendered="#{someOtherCondition}"> 在 h:form 之上,在第一次呈现后(在服务器端)等于 false。 但是,此 panelGroup 不是渲染的一部分。所以,我的代码:

<h:panelGroup rendered="#{someOtherCondition}">
    <h:form id="securityForm">
          <h:panelGroup rendered="#{someCondition}">
          ......
          </h:panelGroup>
     </h:form>
</h:panelGroup>
<h:form>
    <a4j:jsFunction name="renderOnBusinessErrorEvent" execute="@none" bypassUpdates="true" immediate="true"
            render="securityForm">
    </a4j:jsFunction>
</h:form>

在调用 renderOnBusinessErrorEvent() 之前,我将 someOtherCondition 的值从 true 更改为 false,但我没有重新呈现该元素。实际上,在服务器端这个元素已经丢失了。看起来像是 JSF 功能,但它在某处指定了吗?