Где IModel Apache Wicket получает объект? - PullRequest
0 голосов
/ 17 ноября 2011

Прежде всего, пожалуйста, посмотрите, как 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"));
            }
        });
    }

И мои вопросы:

  • Как populateItem получает входные данные для параметра IModel?

  • Я не могу найти какой-либо код в этом приложении, который явно создает объект IModel. Правильно ли для меня предположить, что объект извлекается непосредственно из таблицы в базе данных? Я думаю об этом, потому что для этого приложения используется Mapping Hibernate.

1 Ответ

2 голосов
/ 17 ноября 2011

Модели создаются с использованием IDataProvider, который вы предоставляете для DataTable (конструктор DataTable также примет ваш список IColumn).IDataProvider может использовать Hibernate - трудно сказать, не имея дополнительной информации об этой реализации.

...