上面有100个"最爱"。当页面加载时,它只显示10。当我点击"Show More Favs"时,它又显示了10个Favs。
奇怪的是,在我点击Show More Favs,点击Remove from list之后,它没有调用backBean中的方法
My backBean is 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>
罪魁祸首是使用多种形式和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>