单击commandButton后不再调用CommandLink

时间:2011-07-20 19:51:30

标签: jsf button jsf-2

有一个包含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>

1 个答案:

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