我想知道如何在apache中使用表控件。我真正需要知道的是如何填充表控件。到目前为止,我看到的示例涉及该示例中未定义的方法的使用。在下面的示例中,未定义方法getCustomerService()和getCustomerSsortedByname(10),因此很难遵循此示例。有人会知道一种简单的填充桌子控件的方法吗?一个完整的例子很棒。
public class SimpleTablePage extends Page {
@Bindable protected Table table = new Table();
// Constructor ------------------------------------------------------------
public SimpleTablePage() {
table.setClass(Table.CLASS_ITS);
table.addColumn(new Column("id"));
table.addColumn(new Column("name"));
table.addColumn(new Column("email"));
table.addColumn(new Column("investments"));
}
// Event Handlers ---------------------------------------------------------
/** * @see Page#onRender() */
@Override
public void onRender() {
List list = getCustomerService().getCustomersSortedByName(10);
table.setRowList(list);
}
}
我意识到这个问题已经大几个月了,但是没有任何答案,我觉得它值得一个。
我也对这个示例感到失望。没有迹象表明该列表应该是什么。我不记得我是怎么找到这个答案的。也许通过盯着桌子的代码太长。数据的实际渲染位于列类的渲染方法中。
应将列表传递到setrowlist函数中的表格,应为列表< map< string,object>>。每个映射代表一个一行,该映射在表的列名称上被键入。该行细胞的内容将是地图值的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想要返回映射&lt; string,object&gt;的迭代器。也。我还没有找到使用此方法的优势,但是我在示例代码中使用了它。
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;
}
}
这只是昨天撰写的概念验证代码,所以我没有打扰清洁它。我不确定这里的优势是什么,因为您使用哪种方法所花费的时间与所有这些相同。通过这种方法,数据处理发生在渲染而不是初始化时进行。好像这是一个懒惰的模式,因为数据在渲染之前什么都不做。