我不确定,我在代码中做错了什么,但我经历了http://stackoverflow.com/questions/14655951/jsf-viewstate-not-updated-when-submitting-2-forms
并提供正确的组件ID,它的工作正常没有问题,但渲染的commandLink没有调用action方法,而是它创建类的对象作为托管bean在RequestScope中。
以下是我的示例代码:
<h:form prependId="false" id="favMenu">
<h:commandLink id="discussions" action="#{testBean.someMethod}">
Test
<f:param name="key" value="1234" />
<f:ajax onevent="applyDiscJs" render="@form :centerMenuContainer :center" />
</h:commandLink>
</h:form>
和其他形式:
<h:outputLabel id="centerMenuContainer" styleClass="borderLessPannel">
<div class="center" style="margin: 1.9em 18.1em 0em; width: 68.4%;">
<h:form id="centerMenu" prependId="false">
<h:outputLabel rendered="#{someBean.someFlg}">
<h:commandLink id="browseDisc" action="#{someBean.navigateToBrowseDisc}"
styleClass="">
<h:outputText
value="#{messageResource['connect.discussion.main.tab.browse']}" />
</div>
<f:param name="sessionKey" value="#{connectDashBoardBean.sessionKey}" />
<f:ajax onevent="applyOnGoingDiscJs" render="@form :favMenu" />
</h:commandLink>
</h:outputLabel>
</h:form>
</div>
</h:outputLabel>
上面的第二个链接没有调用bean方法。
我尝试了<ui:fragment rendered="#{someBean.someFlg}">
它不能正常工作,当我删除<ui:fragment rendered="#{someBean.someFlg}">
或<h:outputLabel rendered="#{someBean.someFlg}">
时,它的工作方式与预期一致。
请让我知道我究竟做错了什么,因为我在ajax渲染中给出了表单ID,所以逻辑上它应该更新DOM树和应用渲染后可见的第二个链接它应该像普通ajax一样工作行为?
如果这不是条件,请告诉我其他方法我可以解决这个问题。请注意,保留一个表格对我来说是不可行的。