我有
<h:form> <h:commandLink action="#{my_fake_ajax_link}"> <h:outputText value="Link" /> <f:ajax render=":mydiv" /> </h:commandLink> </h:form> <h:panelGroup layout="block" id="mydiv"> <h:form> <h:commandLink action="#{mybean.delete(0)}"> <h:outputText value="Here" /> <f:ajax render="@form" /> </h:commandLink> </h:form> </h:panelGroup>
当我单击“ my_fake_ajax_link”一次时,则必须单击两次“删除”链接。这仅仅是一个例子。我没有这个真实的案例。我在页面上有多种形式,不能仅将所有形式添加为一种形式。
我检查了问题所在,它是:
mydiv
如何添加ViewState?如何仅使用一种表格就可以使其工作?在我看来,这似乎是一个JSF错误。我不想自动刷新该div
jQuery("#mydiv").load(document.location.href);
但在最坏的情况下,我会尽可能。
这是自动包含jsf.js的JSF库中的一个已知问题,该库处理ajax响应。另请参见即将发布的JSF 2.3中已修复的JSF规范问题790。同时,对于JSF 2.0 / 2.1 / 2.2,您必须<h:form>在render属性内显式指定另一个ID,以触发适当添加视图状态。
jsf.js
<h:form>
render
<h:form> <h:commandLink action="#{my_fake_ajax_link}"> <h:outputText value="Link" /> <f:ajax render=":mydiv :mydivForm" /> </h:commandLink> </h:form> <h:panelGroup layout="block" id="mydiv"> <h:form id="mydivForm"> <h:commandLink action="#{mybean.delete(0)}"> <h:outputText value="Here" /> <f:ajax render="@form" /> </h:commandLink> </h:form> </h:panelGroup>
不,这不会在ajax响应中引起任何开销或标记重复。或者,使用OmniFacesfixviewstate.js。
fixviewstate.js