jsf2-jsf呈现的方法不会在第二次调用



我有下一个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方法被调用,并且期望的对话框出现在页面上。在第二次中,rendered方法没有被调用,但模型已经更改,我希望该对话框不会出现在页面上。我认为这是一些富人的问题,我尝试使用f:ajax

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

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

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

<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的特性,但它在某个地方被指定了吗?

相关内容

  • 没有找到相关文章

最新更新