使用ajax4jsf在JSF复杂组件(Table)中实现ajax更新功能
不使用InvokeOnComponent,在Iterable JSF组件中实现局部更新,
新的Ajax Listener 添加到发布包中,来实现复杂组件的局部更新. 如果你想在JSF DataTable(or Facelets ui:repeat) 中添加ajax功能,你现在只需要在 a4j:support or a4j:button/link 组件中添加一个ajax listener <a4j:ajaxListener type="org.ajax4jsf.ajax.forceRender"> 就可以了.
使用该方式,我们就不用使用 InvokeOnComponent , 并且与jsf 1.1 程序兼容.
Example:
以下是代码:
<h:dataTable value="#{pictures.al}" var="pics"> <f:facet name="header"> <f:verbatim>Data table with Pictures and Zoom Elements</f:verbatim> </f:facet> <h:column> <h:panelGroup id="rerenderpic"> <h:graphicImage value="#{pics.flag}" width="#{pics.width}" height="#{pics.height}" style="display:block;"/> <a4j:commandLink value="Zoom In" action="#{pictures.zoomIn}" reRender="rerenderpic" style="display:#{pics.zoomed ? 'none': 'block'}"> <a4j:actionparam value="#{pics.flag}" name="picture"/> <a4j:ajaxListener type="org.ajax4jsf.ajax.ForceRender"/> </a4j:commandLink> <a4j:commandLink value="Zoom Out" action="#{pictures.zoomOut}" reRender="rerenderpic" style="display:#{pics.zoomed ? 'block': 'none'}"> <a4j:actionparam value="#{pics.flag}" name="picture"/> <a4j:ajaxListener type="org.ajax4jsf.ajax.ForceRender"/> </a4j:commandLink> </h:panelGroup> </h:column> </h:dataTable>
[Ctrl+A 全部选择]
我们强制相应在Event Handler中产生. 所有的 Iterable JSF 组件在调用handler以前设置 iteration variables的值.所以我们可以在该阶段更新局部视图.
资源: JSF中文论坛 http://bbs.hexiao.cn/