有一个包含100个“Favs”的列表。它只在页面加载时显示10。当我点击“显示更多收藏”时,它会显示另外10个收藏。
有什么奇怪之处,我点击Show More Favs,点击Remove from list,它不会在backBean中调用方法。
我的backBean是ViewScoped。
<ui:repeat value="#{bean.list}" var="fav">
<h:form>
<h:commandLink styleClass="someStyle" title="Remove from list" action="#{bean.remove(fav.id)}"/>
</h:form>
</ui:repeat>
<h:form>
<h:commandButton value="Show More Favs" action="#{bean.showMore}" >
<f:param name="moreFav" value="10" />
<f:ajax event="action" render="@all" />
</h:commandButton>
</h:form>
答案 0 :(得分:1)
罪魁祸首是使用多种形式和render="@all"
。如果您从ajax表单中重新呈现另一个表单,另一个表单的视图状态将会丢失。
您需要更改代码,以便仅重新呈现其他表单的内容:
<h:form id="otherform">
<h:panelGroup id="list">
<ui:repeat value="#{bean.list}" var="fav">
<h:commandLink styleClass="someStyle" title="Remove from list" action="#{bean.remove(fav.id)}"/>
</ui:repeat>
</h:panelGroup>
</h:form>
<h:form>
<h:commandButton value="Show More Favs" action="#{bean.showMore}" >
<f:param name="moreFav" value="10" />
<f:ajax event="action" render=":otherform:list" />
</h:commandButton>
</h:form>