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;
}
答案 0 :(得分:2)
创建一个空的WebMarkupContainer
,它是一个空白div并将其添加到您的页面/父组件中。接下来,onClick
,使用addOrReplace
并将WebMarkupContainer
替换为InstitutTablePanel
。 WebMarkupContainer
和InstitutTablePanel
都应该具有相同的wicket:id
答案 1 :(得分:1)
您必须在ajax调用中定位现有组件,因此我建议在初始化页面时使用模型作为Panel模型初始化InstitutTablePanel。在wicket中不鼓励传递没有包装模型的模型对象,这会导致不必要的问题。
当模型对象为null或为空时,您可以将InstitutTablePanel更改为空。
此外,Wicket是围绕将模型传递给组件而不是普通对象构建的,这些对象最初可能看似不必要,但是当复杂性上升时,模式会阻止许多错误和错误。
编辑:别忘了在添加的面板上使用setoutputmarkupid(true)。