我正在尝试从挂毯教程中学习挂毯,但是其中一部分已经过时了。
使用 GridDataSource 代码是:
package com.packtpub.celebrities.util;
import com.packtpub.celebrities.data.IDataSource;
import com.packtpub.celebrities.model.Celebrity;
import java.util.List;
import org.apache.tapestry.beaneditor.PropertyModel;
import org.apache.tapestry.grid.GridDataSource;
public class CelebritySource implements GridDataSource {
private IDataSource dataSource;
private List<Celebrity> selection;
private int indexFrom;
public CelebritySource(IDataSource ds) {
this.dataSource = ds;
}
public int getAvailableRows() {
return dataSource.getAllCelebrities().size();
}
public void prepare(int indexFrom, int indexTo, PropertyModel propertyModel, boolean ascending) {
String propertyName = propertyModel == null ? null : propertyModel.getPropertyName();
System.out.println("Preparing selection.");
System.out.println("Index from " + indexFrom + " to " + indexTo);
System.out.println("Property name is: " + propertyName);
System.out.println("Sorting order ascending: " + ascending);
this.selection = dataSource.getRange(indexFrom, indexTo);
this.indexFrom = indexFrom;
}
public Object getRowValue(int i) {
System.out.println("Getting value for row " + i);
return selection.get(i - this.indexFrom);
}
public Class getRowType() {
return Celebrity.class;
}
}
方法实现 prepare 现在看起来像
public void prepare(int startIndex, int endIndex, List<SortConstraint> sortConstraints) {}
google.com 上显示新方法实现的少数示例之一是:
public void prepare(int startIndex, int endIndex, List<SortConstraint> sortConstraints) {
for (SortConstraint constraint : sortConstraints) {
final ColumnSort sort = constraint.getColumnSort();
if (sort == ColumnSort.UNSORTED) continue;
final PropertyConduit conduit = constraint.getPropertyModel().getConduit();
final Comparator valueComparator = new Comparator<Comparable>() {
public int compare(Comparable o1, Comparable o2) {
// Simplify comparison, and handle case where both are nulls.
if (o1 == o2) return 0;
if (o2 == null) return 1;
if (o1 == null) return -1;
return o1.compareTo(o2);
}
};
final Comparator rowComparator = new Comparator() {
public int compare(Object row1, Object row2) {
Comparable value1 = (Comparable) conduit.get(row1);
Comparable value2 = (Comparable) conduit.get(row2);
return valueComparator.compare(value1, value2);
}
};
final Comparator reverseComparator = new Comparator() {
public int compare(Object o1, Object o2) {
int modifier = sort == ColumnSort.ASCENDING ? 1 : -1;
return modifier * rowComparator.compare(o1, o2);
}
};
// We can freely sort this list because its just a copy.
Collections.sort(_list, reverseComparator);
}
}
有没有办法像现在一样使用 prepare 方法创建旧代码工作的功能?
public void prepare(int startIndex, int endIndex, List<SortConstraint> sortConstraints) {}
也将不胜感激这个问题的任何其他解决方案。