Wicket:我可以在初始化 java 组件之前创建标记吗?
Wicket: Can I create the markup before initializing the java component?
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;
}
您必须在 ajax 调用中定位现有组件,因此我建议在使用模型作为面板模型的页面初始化时初始化 InstitutTablePanel。在 wicket 中不鼓励在没有包装模型的情况下传递模型对象,这会导致不必要的问题。
当模型对象为 null 或为空时,您可以将 InstitutTablePanel 更改为空。
此外,Wicket 是围绕将模型传递给组件而不是普通对象而构建的,乍一看这似乎是不必要的,但当复杂性增加时,该模式可以防止许多错误和错误。
编辑:不要忘记在添加的面板上使用 setoutputmarkupid(true)。
创建一个空白的 WebMarkupContainer
div 并将其添加到您的 page/parent 组件中。接下来,onClick
,使用 addOrReplace
并将 WebMarkupContainer
替换为 InstitutTablePanel
。 WebMarkupContainer
和 InstitutTablePanel
应该具有相同的 wicket:id
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;
}
您必须在 ajax 调用中定位现有组件,因此我建议在使用模型作为面板模型的页面初始化时初始化 InstitutTablePanel。在 wicket 中不鼓励在没有包装模型的情况下传递模型对象,这会导致不必要的问题。
当模型对象为 null 或为空时,您可以将 InstitutTablePanel 更改为空。
此外,Wicket 是围绕将模型传递给组件而不是普通对象而构建的,乍一看这似乎是不必要的,但当复杂性增加时,该模式可以防止许多错误和错误。
编辑:不要忘记在添加的面板上使用 setoutputmarkupid(true)。
创建一个空白的 WebMarkupContainer
div 并将其添加到您的 page/parent 组件中。接下来,onClick
,使用 addOrReplace
并将 WebMarkupContainer
替换为 InstitutTablePanel
。 WebMarkupContainer
和 InstitutTablePanel
应该具有相同的 wicket:id