3

我正在使用带有 Weblogic 10.3.6 作为服务器的 Hibernate 4、Spring 3 和 JSF 2.0。

我在一页中有两个数据表,为了填充数据表,我正在使用延迟加载。

我面临的问题是当两个数据表都显示时,分页不起作用。它确实转到第 2 页和第 3 页等等,但数据表中的记录对于两个数据表保持不变。如果我删除其中任何一个,则分页效果很好。

我注意到当我有多个数据表时,即使过滤器也不起作用。两个数据表都采用单一形式,它们都具有两个不同的 ManagedBean,并且都属于视图范围。我尝试过请求范围,但没有解决我的问题。

我该如何解决这个问题?

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 第一个数据表

@Named("emp")
@Scope("view")
@PostConstruct
    public LazyDataModel<Employee> getLazyModel() {
        if (lazyModel == null) {
            lazyModel = new LazyRequestDataModel(empList, empService) {

            };          
        }

        return lazyModel;
    }

Managedbean 第二个数据表

@Named("dept")
@Scope("view")
@PostConstruct
    public LazyDataModel<Department> getLazyModel() {
        if (lazyModel == null) {
            lazyModel = new LazyRequestActivitiesDataModel(deptList,
                    deptService) {

            };
        }

        return lazyModel;
    }
4

1 回答 1

2

不确定它是否会有所帮助,但无论如何这是一个更好的方法

将您的更改@PostConstruct为 public void ,就像这样(对两个 Bean 都这样做)

@PostConstruct
public void init(){
    initTable();
}

private void initTable(){
    lazyModel = new LazyRequestActivitiesDataModel(deptList,deptService);
}

public LazyDataModel<Department> getLazyModel() {
    return lazyModel;

}

于 2012-12-26T06:41:55.773 回答