我在Jsf页面上遇到了问题。 datascroller没有更改dataTable的分页,点击了一些页面(仍然保留在分页的第一页)。
此代码不会更改分页:
<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来纠正数据表分页? 有什么想法吗?
修改:DataProvider代码
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;
}
}
答案 0 :(得分:1)
使用richfaces 3.3.3测试你的代码并且它工作正常。在两种情况下分页都可以改变。所以我认为sortOrder和datatable分页没有关系来影响彼此。
我发现release note of RichFaces - Version 3.3.3.BETA1对rich:datascroller
有一些错误修复。也许您可以在DEV环境中升级到richfaces 3.3.3以查看问题是否仍然存在。
答案 1 :(得分:1)
这是RichFaces中的一个错误:
TableSorting - Built-in - pages cannot be switched by DataScroller
在初始状态页面上点击编号页面(例如2)时 没有换过。
点击排序列后,表格重新渲染得很好 报头中。
升级到3.3.3.Final应该会有所帮助。
关于ExtendedTableDataModel
:
在3.3.3.Final(richfaces-impl-3.3.3.Final.jar中的org.richfaces.model.ExtendedTableDataModel
)中可用。
它也可以在文档中找到: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);