IModel Apache Wicket在哪里检索对象?

IModel Apache Wicket在哪里检索对象?,wicket,Wicket,首先,请看一下本例中如何使用IModel: @SuppressWarnings("serial") public static List<IColumn> getTableColumns( final ReportParams reportParams, final boolean columnsSortable ) { List<IColumn> columns = new ArrayList<IColumn>();

首先,请看一下本例中如何使用IModel:

@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"));
            }
        });
    }
@SuppressWarnings(“串行”)
公共静态列表getTableColumns(
final ReportParams ReportParams,final boolean ColumnSorTable
) {
列表列=新的ArrayList();
最终映射eventIdToolMap=Locator.getFacade().getEventRegistryService().getEventIdToolMap();
//场地
if(Locator.getFacade().getReportManager().isReportColumnAvailable(reportParams,StatsManager.T_站点)){
columns.add(新属性列(新资源模型(“th_站点”),ColumnSorTable?ReportsDataProvider.colu站点:null,ReportsDataProvider.COL_站点){
@凌驾
公共void populateItem(项、字符串组件、IModel模型){
最后一个字符串site=((Stat)model.getObject()).getSiteId();
字符串lbl=“”,href=“”;
站点s=null;
试一试{
s=Locator.getFacade().getSiteService().getSite(站点);
lbl=s.getTitle();
href=s.getUrl();
}捕获(IDunusede异常){
lbl=(字符串)新资源模型(“站点_未知”).getObject();
href=null;
}
添加(新的ImageWithLink(componentId,null,href,lbl,“_parent”);
}
});
}
我的问题是:

  • populateItem如何获取IModel参数的输入

  • 我在这个应用程序中找不到任何显式构造IModel对象的代码。我认为直接从数据库中的表检索对象是正确的吗?我这样想是因为映射Hibernate用于这个应用程序


模型是使用您提供给的IDataProvider创建的(DataTable构造函数也将使用您的IColumn列表)。
IDataProvider可以使用Hibernate—如果没有关于该实现的更多信息,很难说。

是的,我刚刚找到了一个实现IDataProvider的类,但是有没有一种简单的方法来确定IDataProvider是否依赖于数据库?请检查迭代器