1

我在 Jsf 页面上遇到了问题。datascroller 没有改变 dataTable 的分页点击数页(仍然停留在分页的第一页)。

  • 富脸:3.3.2.SR1
  • JSF:1.2
  • JBoss 5.0.1

此代码不会更改分页:

<rich:extendedDataTable id="tableDataTable" value="#{beanController.listTableDataModel}" 
    var="tableItem" selectionMode="single"
    rows="3" width="150px" height="100px" selection="#{beanController.tableSelection}">

    <rich:column sortBy="#{tableItem.code}" width="150px" label="#{msg.table}">
        <h:outputText value="#{tableItem.code}" />
    </rich:column>
    <rich:column sortBy="#{tableItem.code}" width="150px" label="#{msg.table}">
        <h:outputText value="#{tableItem.code}" />
    </rich:column>
</rich:extendedDataTable>
<rich:datascroller id="tableDataScroller" align="center" for="tableDataTable" renderIfSinglePage="false" />

我解决了它定义sortOrder属性。这很好用(只有一个区别:sortOrder="ASCENDING"在一列上):

<rich:extendedDataTable id="tableDataTable" value="#{beanController.listTableDataModel}" 
    var="tableItem" selectionMode="single"
    rows="3" width="150px" height="100px" selection="#{beanController.tableSelection}">

    <rich:column sortBy="#{tableItem.code}" width="150px" label="#{msg.table}" sortOrder="ASCENDING">
        <h:outputText value="#{tableItem.code}" />
    </rich:column>
    <rich:column sortBy="#{tableItem.code}" width="150px" label="#{msg.table}">
        <h:outputText value="#{tableItem.code}" />
    </rich:column>
</rich:extendedDataTable>
<rich:datascroller id="tableDataScroller" align="center" for="tableDataTable" renderIfSinglePage="false" />

问题是为什么我们必须使用 datascroller 定义 sortOrder 来纠正数据表分页?任何的想法 ?

编辑:数据提供者代码

public class BeanDataProvider implements DataProvider<Bean> {


    private static final long serialVersionUID = -3539248649798786324L;

    public BeanDataProvider() {
    }

    public BeanDataProvider(ArrayList<Bean> beans) {
        this.beans = beans;
    }

    private List<Bean> beans;


    public Bean getItemByKey(Object paramObject) {
        Bean resultat = null;
        for (Bean bean : this.getBeans()) {
            if (bean.getIdentifiant().equals(paramObject)) {
                resultat = bean;
                break;
            }
        }
        return resultat;
    }


    public List<Bean> getItemsByRange(int paramInt1, int paramInt2) {
        return this.getBeans().subList(paramInt1, paramInt2);
    }


    public Object getKey(Bean paramT) {
        return paramT.getIdentifiant();
    }


    public int getRowCount() {
        return this.getBeans().size();
    }


    public List<Bean> getBeans() {
        if (beans == null) {
            beans = new ArrayList<Bean>();
        }
        return beans;
    }


    public void setbeans(List<Bean> beans) {
        this.beans = beans;
    }

}
4

2 回答 2

1

使用richfaces 3.3.3 测试了你的代码,它工作正常。分页在这两种情况下都可以改变。所以我认为 sortOrder 和数据表分页没有相互影响的关系。

而且我发现RichFaces 的发行说明 - 版本 3.3.3.BETA1有一些关于rich:datascroller. 也许你可以在你的 DEV 环境中升级到 Richfaces 3.3.3,看看问题是否仍然存在。

于 2011-09-12T13:30:53.133 回答
1

这是 RichFaces 中的一个错误:

TableSorting - 内置 - DataScroller 无法切换页面

在初始状态下点击编号页面(如2)时,页面没有切换。

单击排序列的标题后,表格重新渲染得很好。

升级到 3.3.3.Final 应该会有所帮助。

关于ExtendedTableDataModel

它在 3.3.3.Final可用(org.richfaces.model.ExtendedTableDataModel在 richfaces-impl-3.3.3.Final.jar 中)。它也可以在文档中找到:http ://docs.jboss.org/richfaces/3.3.X/3.3.3.Final/en/apidoc_impl/(../apidoc_impl/ 用于richfaces-impl,.. /apidoc/ 用于richfaces-ui)。

它在 RF4中不可用。在 RF4 中探索这些类:

org.richfaces.model.ArrangeableState
org.ajax4jsf.model.ExtendedDataModel
org.richfaces.model.ArrangeableModel

更新:

使用ExtendedTableDataModifiableModel代替ExtendedTableDataModel

new ExtendedTableDataModifiableModel(dataProvider);

甚至更好(当列表用作您的情况的数据源时):

new ListDataModel(list);
于 2011-09-12T22:03:08.997 回答