Wicket:我可以在初始化java组件之前创建标记吗?

时间:2015-08-28 08:59:43

标签: java wicket markup

html文件,如下所示:

<wicket:panel>
    <form wicket:id="adminUIForm">
        <table wicket:id="datatable" class="datatable"></table>
        <div wicket:id="institutTablePanel"></div>
    </form>
</wicket:panel>

但是在我的Java代码中,我只想实例化组件institutTablePanel,当点击数据表中的一行时,因为构造函数看起来像这样:

target.add(new InstitutTablePanel("institutLabelPabel", selectedContact));

并且selectedContact不能为空。 是否有可能在没有得到错误的情况下执行此操作,因为它无法在我的JavaCode中找到该组件?

修改 这可能会有所帮助

@Override
protected Item<Kontakt> newRowItem(final String id, final int index,
    final IModel<Kontakt> model) {
        Item<Kontakt> rowItem = new Item<Kontakt>(id, index, model);
        rowItem.add(new AjaxEventBehavior("onclick") {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onEvent(AjaxRequestTarget target) {
             selectedKontakt = model.getObject();
             target.add(new InstitutTablePanel("institutTablePanel", selectedKontakt));
        }
    });
    return rowItem;
}

2 个答案:

答案 0 :(得分:2)

创建一个空的WebMarkupContainer,它是一个空白div并将其添加到您的页面/父组件中。接下来,onClick,使用addOrReplace并将WebMarkupContainer替换为InstitutTablePanelWebMarkupContainerInstitutTablePanel都应该具有相同的wicket:id

答案 1 :(得分:1)

您必须在ajax调用中定位现有组件,因此我建议在初始化页面时使用模型作为Panel模型初始化InstitutTablePanel。在wicket中不鼓励传递没有包装模型的模型对象,这会导致不必要的问题。

当模型对象为null或为空时,您可以将InstitutTablePanel更改为空。

此外,Wicket是围绕将模型传递给组件而不是普通对象构建的,这些对象最初可能看似不必要,但是当复杂性上升时,模式会阻止许多错误和错误。

编辑:别忘了在添加的面板上使用setoutputmarkupid(true)。