如何在Apache中使用表控件单击



我想知道如何在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;
    }
}

这只是昨天撰写的概念验证代码,所以我没有打扰清洁它。我不确定这里的优势是什么,因为您使用哪种方法所花费的时间与所有这些相同。通过这种方法,数据处理发生在渲染而不是初始化时进行。好像这是一个懒惰的模式,因为数据在渲染之前什么都不做。

最新更新