我正在使用Primefaces [<p:dataScroller />][2]
来显示延迟加载项的列表。我的JSF代码看起来像这样:
<p:dataScroller id="scroller" value="#{myAction.myDataModel}" var="item" lazy="true" chunkSize="10">
<section>
<h3>Here is my item : <h:outputText value="#{item.name}" /></h3>
</section>
</p:dataScroller>
此代码没有问题。我的支持代码能够根据需要从数据库中延迟加载项目,而不是一次性将它们全部拉出并在客户端进行分页。但是,现在我想在datascroller中添加<h:commandLink />
并执行Ajax提交,但只重新呈现被单击的项目。我的后备操作将更新我的项目的状态,我会根据此状态显示不同的消息。我以为我可以这样做:
<p:dataScroller id="scroller" value="#{myAction.myDataModel}" var="item" lazy="true" chunkSize="10">
<section>
<h:panelGroup id="#{item.name}" layout="block">
<h3>Here is my item : <h:outputText value="#{item.name}" /></h3>
<h:commandLink action="#{myAction.foo()}" value="Click here">
<f:ajax render="#{item.name}" />
</h:commandLink
</h:panelGroup>
</section>
</p:dataScroller>
...但是,我现在知道我在JSF中没有动态ID,因此我<h:panelGroup />
的渲染失败了。我可以将render
属性值<f:ajax />
设置为我的JSF表单,但是从头开始重新呈现所有内容,这不是所需的行为。
如果我的<p:dataScroller />
中显示了100个项目,并且我点击项目30上的链接,是否有任何方法只能渲染该项目?有没有更好的方法来处理这个用例?还是我完全卡住了?
答案 0 :(得分:1)
您不需要动态ID。您可以使用专为此类案例设计的PrimeFaces selectors。因此,您可以按类或其他方式引用父母,项目。完整jquery selector api随时为您服务非常灵活!只是不确定它是否适用于h:commandButton和f:ajax(可能是h:commandButton和p:ajax工作)。但可以肯定的是
<p:commandButton update="@(:parent)" value="update parent" />