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