Jsf 单击commandButton后不再调用CommandLink

Jsf 单击commandButton后不再调用CommandLink,jsf,button,jsf-2,Jsf,Button,Jsf 2,有一个名单上有100个“fav”。页面加载时仅显示10。当我点击“显示更多FAV”时,它会显示更多的10个FAV 奇怪的是,在我点击ShowMoreFAV,点击RemovefromList之后,它并没有在backBean中调用这个方法 我的backBean是可视范围的 <ui:repeat value="#{bean.list}" var="fav"> <h:form> <h:commandLink styleClass="someStyle" title="

有一个名单上有100个“fav”。页面加载时仅显示10。当我点击“显示更多FAV”时,它会显示更多的10个FAV

奇怪的是,在我点击ShowMoreFAV,点击RemovefromList之后,它并没有在backBean中调用这个方法

我的backBean是可视范围的

<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表单内部重新呈现另一个表单,则另一个表单的viewstate将丢失

您需要更改代码,以便仅重新呈现另一表单的内容:

<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>