3

サーバーとしてWeblogic10.3.6でHibernate4、Spring 3、およびJSF2.0を使用しています。

遅延読み込みを使用しているデータテーブルにデータを入力するために、1ページに2つのデータテーブルがあります。

私が直面している問題は、両方のデータテーブルが表示された後、ページネーションが機能しないことです。2ページ目と3ページ目などに進みますが、datatableのレコードは両方のdatatableで同じままです。それらのいずれかを削除すると、ページネーションは完全に機能します。

複数のデータテーブルがある場合、フィルターでさえ機能しないことに気づきました。両方のデータテーブルは単一の形式であり、両方に2つの異なる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 First Datatable

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

            };          
        }

        return lazyModel;
    }

Managedbeanの2番目のデータテーブル

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

            };
        }

        return lazyModel;
    }
4

1 に答える 1

2

それが役立つかどうかはわかりませんが、とにかくそれはより良いアプローチです

@PostConstructこのように、パブリックボイドに変更します(両方の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 に答える