Jsf rich:extendedDataTable上的Datascroller和sortOrder

Jsf rich:extendedDataTable上的Datascroller和sortOrder,jsf,datatable,richfaces,datascroller,Jsf,Datatable,Richfaces,Datascroller,我在Jsf页面上遇到了一个问题。 datascroller没有更改dataTable的分页,只是单击了一些页面(仍然停留在分页的第一页) Richfaces:3.3.2.SR1 Jsf:1.2 JBoss 5.0.1 此代码不会更改分页: <rich:extendedDataTable id="tableDataTable" value="#{beanController.listTableDataModel}" var="tableItem" selectionMode="

我在Jsf页面上遇到了一个问题。 datascroller没有更改dataTable的分页,只是单击了一些页面(仍然停留在分页的第一页)

  • Richfaces: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" />
问题是为什么我们必须定义排序器来使用datascroller更正datatable分页? 有什么想法吗

编辑:数据提供程序代码

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

}
公共类BeanDataProvider实现数据提供程序{
私有静态最终长serialVersionUID=-35392486494798786324L;
公共BeandapProvider(){
}
公共BeanDataProvider(ArrayList beans){
这个.豆子=豆子;
}
私有列表bean;
公共Bean getItemByKey(对象paramObject){
Bean result=null;
for(Bean:this.getBeans()){
if(bean.getIdentification().equals(paramObject)){
resultat=bean;
打破
}
}
返回结果;
}
公共列表getItemsByRange(int参数1,int参数2){
返回这个.getBeans().subList(paramInt1,paramInt2);
}
公共对象getKey(Bean参数){
返回参数getIdentification();
}
public int getRowCount(){
返回此.getBeans().size();
}
公共列表getBeans(){
if(bean==null){
beans=新的ArrayList();
}
返豆;
}
公共bean(列表bean){
这个.豆子=豆子;
}
}

使用richfaces 3.3.3对代码进行了测试,效果良好。在这两种情况下,分页都可以更改。因此,我认为排序器和数据表分页没有相互影响的关系


我还发现了一些关于
rich:datascroller
的bug修复。也许您可以在开发环境中升级到richfaces 3.3.3,看看问题是否仍然存在。

这是richfaces中的一个bug:

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

单击排序列的 标题

升级到3.3.3.Final会有所帮助

关于扩展表数据模型:

new ExtendedTableDataModifiableModel(dataProvider);
在3.3.3.Final中提供(
org.richfaces.model.ExtendedTableDataModel
在richfaces-impl-3.3.Final.jar中)。 它也可以在文档中找到:(../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);
或者更好(在您的案例中,列表用作数据源时):


“排序器和数据表分页没有相互影响的关系。”我同意,这就是我发布的原因;)否则,我将更新并查看。感谢您将提示更改为3.3.3.Final,我对未解决的ExtendedTableDataModel有问题。我在中找到了ExtendedTableDataModel类,但在中没有找到。这个类在3.3.3中被删除了吗?在中查找ExtendedTableDataModel,但不在jar中。。。这个类在3.3.3 jar中被删除了吗?@Jean Charles我可以在
richfaces-impl-3.3.3.Final.jar中找到ExtendedTableDataModel,查看我对Andrey answer的评论,知道升级并没有纠正错误。还有其他想法或建议吗?我升级到了3.3.3.Final,但问题仍然存在。我仍然可以在列中添加排序器来更正它。有关信息,我现在使用:
org.richfaces.ui richfaces ui 3.3.3.Final org.richfaces.framework richfaces impl 3.3.3.Final
@Jean Charles您是否尝试过使用其他表模型实现(请参阅更新部分)?我正在这样做。。。但我有优先权的工作,这阻止了我的发展。目前,使用ListDataModel无法检索所选行,
getRowData()
返回null。如何声明
rich:extendedDataTable
并在
getRowData()
中保留该行?我会在该行过期之前向您提供奖励,但解决方案尚未实现。如果不使用数据提供程序,我无法获取所选值。你能帮助我如何使用ListDataModel和extendedDataTable吗?另外,你能告诉我为什么我不必使用ExtendedTableDataModel吗?@Jean-Charles ExtendedTableDataModel有一些奇怪的walk方法实现。此外,richDataTable组件还有一个棘手的实现。如果您有排序列,它会用ExtendedTableDataModifiableModel包装dataModel,否则它会按原样传递您的dataTable。您的DataProvider实现是什么?可以在问题中粘贴代码片段吗?@Andrey:请参见编辑。你在想什么?@Java请看文章的开头:Richfaces 3.3.2.SR1(我将尝试使用3.3.3.Final)、JSF1.2、JBoss 5.0.1。你还想要哪个版本?
new ListDataModel(list);