我使用Hibernate 4,Spring 3和JSF 2.0以及Weblogic 10.3.6作为服务器。
我在一个页面中有两个数据表,为了填充数据表,我正在使用延迟加载。
我面临的问题是当两个数据表都显示时,分页不起作用。它确实转到第2页和第3页,依此类推,但数据表中的记录对于两个数据表都保持相同。如果我删除其中任何一个,那么分页效果很好。
我注意到,当我有多个数据表时,偶数过滤器也无效。两个数据表都是单一形式,它们都有两个不同的ManagedBeans,两者都是视图范围。我已尝试过请求范围,但没有解决我的问题。
如何解决此问题?
JSF代码
<h:form id="form">
<!-- Master form -->
<p:dataTable id="dataTable" var="req" lazy="true" value="#{emp.lazyModel}"
paginator="true" rows="10"
selection="#{emp.selectedRequest}"
selectionMode="single">
<p:ajax event="rowSelect" listener="#{emp.onRowSelect}" />
<p:column id="empNo" filterBy="#{req.empNo}"
headerText="Request No" footerText="contains"
filterMatchMode="endsWith">
<h:outputText value="#{req.empNo}" />
</p:column>
other columns
</p:dataTable>
<!-- Detail form -->
<p:dataTable id="dataTableDet" var="reqAct" lazy="true" value="#{dept.lazyModel}"
paginator="true" rows="1"
rowsPerPageTemplate="5,10">
<f:facet name="header">
Emp Details
</f:facet>
<p:column>
<f:facet name="header">
<h:outputText value="SLNo" />
</f:facet>
<h:outputText value="#{reqAct.slNo}" />
</p:column>
<p:column id="empNo" filterBy="#{reqAct.empNo}"
headerText="Request No" footerText="contains"
filterMatchMode="endsWith">
<h:outputText value="#{reqAct.empNo}" />
</p:column>
other columns
</p:dataTable>
</h:form>
Managedbean First Datatable
@Named("emp")
@Scope("view")
@PostConstruct
public LazyDataModel<Employee> getLazyModel() {
if (lazyModel == null) {
lazyModel = new LazyRequestDataModel(empList, empService) {
};
}
return lazyModel;
}
Managedbean Second Datatable
@Named("dept")
@Scope("view")
@PostConstruct
public LazyDataModel<Department> getLazyModel() {
if (lazyModel == null) {
lazyModel = new LazyRequestActivitiesDataModel(deptList,
deptService) {
};
}
return lazyModel;
}
答案 0 :(得分:2)
不确定它会有所帮助,但无论如何它是一种更好的方法
将您的@PostConstruct
更改为公共空白,就像这样(对两个豆都这样做)
@PostConstruct
public void init(){
initTable();
}
private void initTable(){
lazyModel = new LazyRequestActivitiesDataModel(deptList,deptService);
}
public LazyDataModel<Department> getLazyModel() {
return lazyModel;
}