【问题标题】:Primefaces two datatables in one page causing pagination and filter issuesPrimefaces 两个数据表在一页中导致分页和过滤问题
【发布时间】:2012-12-26 02:15:51
【问题描述】:

我使用 Hibernate 4、Spring 3 和 JSF 2.0 以及 Weblogic 10.3.6 作为服务器。

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

我面临的问题是当两个数据表都显示时,分页不起作用。它确实转到第 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 First Datatable

@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;
    }

【问题讨论】:

    标签: java spring jsf-2 primefaces lazy-loading


    【解决方案1】:

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

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

    @PostConstruct
    public void init(){
        initTable();
    }
    
    private void initTable(){
        lazyModel = new LazyRequestActivitiesDataModel(deptList,deptService);
    }
    
    public LazyDataModel<Department> getLazyModel() {
        return lazyModel;
    

    }

    【讨论】:

    • 通过在 web.xml 中添加以下内容确实有帮助 &lt;context-param&gt; &lt;param-name&gt;com.sun.faces.enableRestoreView11Compatibility&lt;/param-name&gt; &lt;param-value&gt;true&lt;/param-value&gt; &lt;/context-param&gt; 谢谢
    • 好的,奇怪...stackoverflow.com/questions/1715985/… cause com.sun.faces.enableRestoreView11Compatibility 是 JSF 1.2 的设置,它告诉 JSF 1.2 的行为类似于 JSF 1.1。
    • 我在 Firebug 控制台中收到一些错误消息,当我搜索 google 以解决 firebug 错误时,我发现了这个。通过在 web.xml 中添加它也解决了我的分页问题。但是我遇到了另一个问题here
    • Daniel 添加这个会引起什么问题吗?因为我用的是JSF2.0。 &lt;context-param&gt; &lt;param-name&gt;com.sun.faces.enableRestoreView11Compatibility&lt;/param-name&gt; &lt;param-value&gt;true&lt;/param-value&gt; &lt;/context-param&gt;
    • 不知道,但这看起来不是一个好主意......我感觉它的原因是你的视图范围,javax.faces.application.ViewExpiredException i> 可能是原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 2014-05-01
    • 1970-01-01
    • 2015-07-01
    • 2015-12-03
    • 2012-08-24
    相关资源
    最近更新 更多