2011-11-17 24 views
0

首先,請看看IModel是如何在這個例子中使用:IModel Apache Wicket在哪裏檢索對象?

@SuppressWarnings("serial") 
public static List<IColumn> getTableColumns(
     final ReportParams reportParams, final boolean columnsSortable 
    ) { 
    List<IColumn> columns = new ArrayList<IColumn>(); 
    final Map<String,ToolInfo> eventIdToolMap = Locator.getFacade().getEventRegistryService().getEventIdToolMap(); 

    // site 
    if(Locator.getFacade().getReportManager().isReportColumnAvailable(reportParams, StatsManager.T_SITE)) { 
     columns.add(new PropertyColumn(new ResourceModel("th_site"), columnsSortable ? ReportsDataProvider.COL_SITE : null, ReportsDataProvider.COL_SITE) { 
      @Override 
      public void populateItem(Item item, String componentId, IModel model) { 
       final String site = ((Stat) model.getObject()).getSiteId(); 
       String lbl = "", href = ""; 
       Site s = null; 
       try{ 
        s = Locator.getFacade().getSiteService().getSite(site); 
        lbl = s.getTitle(); 
        href = s.getUrl(); 
       }catch(IdUnusedException e){ 
        lbl = (String) new ResourceModel("site_unknown").getObject(); 
        href = null; 
       } 
       item.add(new ImageWithLink(componentId, null, href, lbl, "_parent")); 
      } 
     }); 
    } 

而且我的問題是:

  • 如何populateItem獲得IModel參數的輸入?

  • 我在這個應用程序中找不到任何代碼,它顯式地構造了IModel對象。我認爲直接從數據庫的表中檢索對象是否正確?我在想這個,因爲映射Hibernate用於這個應用程序。

回答

2

該機型使用你提供的DataTable(數據表的構造也會把你IColumn列表)的IDataProvider創建。 IDataProvider可以使用Hibernate--很難說沒有關於該實現的更多信息。

+0

是的我剛剛找到了一個實現IDataProvider的類,但是有一種簡單的方法來確定IDataProvider是否依賴於數據庫? – Best

+1

檢查IDataProvider的_Iterator 迭代器(int first,int count)_實現。 –