我意识到这个问题已经存在几个月了,但它没有任何答案,我觉得它值得一个。
我也对这个例子感到失望。没有迹象表明该列表应该是什么。我不记得我是如何找到这个答案的。也许是盯着表格的代码太久了。数据的实际呈现位于 Column 类的 render 方法中。
应该在 setRowList 函数中传递给 Table 的 List 应该是 List<Map<String,Object>>。每个 Map 代表一行,其中 Map 以表的列名为键。该行单元格的内容将是 Maps 值的 toString() 方法的结果。
private List<Map<String,Object>> getCustomersSortedByName( final int count )
{
final List<Map<String,Object>> toReturn = new LinkedList<Map<String,Object>>();
//I call all my return variables "toReturn" so I know what's going to come out.
final Customer customers[count];
//populate your customer array and sort it here
for( final Customer customer : customers )
{
final Map<String,Object> customerMap = new HashMap<String,Object>();
customer.put( "id", customer.getId() );
customer.put( "name", customer.getName() );
customer.put( "email", customer.getEmail() );
customer.put( "investments", customer.getInvestments() );
toReturn.add( customerMap );
}
return toReturn;
}
这不是剪切和粘贴代码,可能会产生错误。它仍然是 Table.setRowList(List) 的演示。
还有 Table.setDataProvider(DataProvider) 方法,但在我看来,这似乎是一种更长的方法来做 setRowList 已经做的事情。DataProvider 也需要一个返回 Map<String,Object> 的迭代器。我还没有发现使用这种方法的优势,但我已经在示例代码中使用了它。
public TestPage extends Page
{
private Table table = new Table( "table" );
@Override
public void onInit()
{
table.addColumn( new Column( "property", "property" ) );
table.addColumn( new Column( "value", "value" ) );
table.setDataProvider( new DataProvider(){
public List getData(){
return someList();
}
} );
addControl( table );
}
private List<Map<String,String>> someList()
{
final List<Map<String,String>> toReturn = new LinkedList<Map<String,String>>();
final Enumeration e = System.getProperties().propertyNames();
while( e.hasMoreElements() )
{
final String prop = (String) e.nextElement();
final Map<String,String> property = new TreeMap<String,String>();
property.put( "property", prop );
property.put( "value", System.getProperty( prop, "N/A" ) );
toReturn.add( property );
}
return toReturn;
}
}
这只是昨天编写的概念验证代码,所以我没有费心清理它。我不确定这里有什么优势,因为无论您使用哪种方法,渲染所有这些所需的时间都是相同的。使用这种方法,数据处理发生在渲染而不是初始化时。似乎这是一种惰性初始化模式,因为在渲染之前没有对数据进行任何处理。