【发布时间】:2012-01-14 11:48:34
【问题描述】:
我有一个非常简单直接的问题。 有什么方法可以检测dataTable的变化吗?
假设我有一个使用分页的数据表。现在,当我从第 1 页转到第 2 页时,我需要检测此事件并在同一页面上更新 gMap 组件(我需要 gMap 从支持 bean 刷新其 dataModel)。我尝试使用更新参数,但正如 PF 文档所述,它已被弃用并且不起作用。
我可以通过手动单击 p:button 来更新 gMap,但我需要在 dataTable 更改后自动更新。
也许有一个解决方案,通过使用 javascript 并将数据表小部件绑定到某些操作,但我真的不知道 :(
提前感谢您的帮助
更新
我初始化LazyDataMethod的方法是:
private LazyDataModel<Poi> lazyModel;
private void initializeLazyModel() {
lazyModel = new LazyDataModel<Poi>() {
@Override
public List<Poi> load(int first, int pageSize, String sortField, boolean sortOrder, Map<String, String> filters) {
List<Poi> data = service.getPoisLazily(first, pageSize, sortField, sortOrder, filters);
pois = data;
createMapForPOIs(pois);
return data;
}
};
lazyModel.setRowCount(getNumberOfRows());
}
接下来只有 LazyDataModel 的 getter/setter:
public LazyDataModel<Poi> getLazyModel() {
return lazyModel;
}
public void setLazyModel(LazyDataModel<Poi> lazyModel) {
this.lazyModel = lazyModel;
}
在 pois.xhtml 我有如下数据表声明:
<p:dataTable update="formMap:map" id="tablePois" var="poi" value="#{poiController.lazyModel}" lazy="true"
paginator="true" rows="10" paginatorPosition="bottom"
selection="#{poiController.poi}" rowSelectListener="#{poiController.showPoi}" selectionMode="single"
paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15,30,50">
<p:column>
<h:outputText value="#{poi.name}" />
</p:column>
</p:dataTable>
所以在这一点上我想使用
RequestContext context = RequestContext.getCurrentInstance();
context.addPartialUpdateTarget("form:gMapId");
正如@spauny 所建议的那样。但是不知道放在backing bean的什么位置。
【问题讨论】:
标签: jsf-2 datatable primefaces