如何解决Wicket组件层次结构-getParent
| 我做了一个实验。首先,我要声明html:<form wicket:id=\"form\">
<table>
<tr>
<td>
<table style=\"border: 1px solid;\" cellspacing=\"0\" cellpadding=\"0\">
<tr wicket:id=\"row\">
<td wicket:id=\"column\" style=\"border: 1px solid #3A6395\">
<div wicket:id=\"div\">
<span wicket:id=\"panel\"></span>
<span wicket:id=\"tooltip\"><span wicket:id=\"tooltipPanel\"></span></span>
</div>
</td>
</tr>
</table>
</td>
<td>
</td>
</tr>
</table>
</form>
<wicket:fragment wicket:id=\"labelFragment\">
<span wicket:id=\"value\"></span>
</wicket:fragment>
<wicket:fragment wicket:id=\"linkFragment\">
<a href=\"\" wicket:id=\"link\">
<span wicket:id=\"value\"></span>
</a>
</wicket:fragment>
Java:
private class ReportDisplayByUserWithTaskTypeSortForm extends Form {
private static final long serialVersionUID = 10162L;
public ReportDisplayByUserWithTaskTypeSortForm(String id) {
super(id);
setOutputMarkupId(true);
addComponent();
}
private void addComponent() {
ListView row = new ListView(\"row\",new LoadableDetachableModel() {
private static final long serialVersionUID = 10164L;
@Override
protected Object load() {
return getUserMonitorMap();
}
}) {
private static final long serialVersionUID = 10165L;
@Override
protected void populateItem(ListItem rowItem) {
@SuppressWarnings(\"unchecked\")
List<? extends Element> columnMap = (List<Element>) rowItem.getModelObject();
ListView column = new ListView(\"column\",columnMap) {
private static final long serialVersionUID = 10166L;
@Override
protected void populateItem(ListItem columnItem) {
Element element = (Element) columnItem.getModelObject();
WebMarkupContainer div = new WebMarkupContainer(\"div\");
Label value = new Label(\"value\");
Fragment fragment = null;
if (element instanceof TaskTypeLabelElement) {
fragment = new Fragment(\"panel\",\"linkFragment\",this);
AjaxLink link = new AjaxLink(\"link\") {
private static final long serialVersionUID = 10163L;
@Override
public void onClick(AjaxRequestTarget target) {
sortAsc = !sortAsc;
doSort();
target.addComponent(this.getParent().getParent().getParent().getParent().getParent().getParent().getParent());
}
};
link.add(value);
fragment.add(link);
} else {
fragment = new Fragment(\"panel\",\"labelFragment\",this);
fragment.add(value);
}
// some other code goes here
columnItem.add(div);
}
};
rowItem.add(column);
}
};
add(row);
}
}
}
片段中的链接实例化为:
AjaxLink link = new AjaxLink(\"link\") {
private static final long serialVersionUID = 10163L;
@Override
public void onClick(AjaxRequestTarget target) {
System.out.println(this);
System.out.println(this.getParent());
System.out.println(this.getParent().getParent());
System.out.println(this.getParent().getParent().getParent());
System.out.println(this.getParent().getParent().getParent().getParent());
System.out.println(this.getParent().getParent().getParent().getParent().getParent());
System.out.println(this.getParent().getParent().getParent().getParent().getParent().getParent());
System.out.println(this.getParent().getParent().getParent().getParent().getParent().getParent().getParent());
System.out.println(this.getParent().getParent().getParent().getParent().getParent().getParent().getParent().getParent());
System.out.println(this.getParent().getParent().getParent().getParent().getParent().getParent().getParent().getParent().getParent());
}
};
System.out.println的输出:
15:58:17,476 INFO [STDOUT] [MarkupContainer [Component id = link]]
15:58:17,477 INFO [STDOUT] [MarkupContainer [Component id = panel]]
15:58:17,477 INFO [STDOUT] [MarkupContainer [Component id = div]]
15:58:17,477 INFO [STDOUT] [MarkupContainer [Component id = 0]]
15:58:17,477 INFO [STDOUT] [MarkupContainer [Component id = column]]
15:58:17,477 INFO [STDOUT] [MarkupContainer [Component id = row]]
15:58:17,477 INFO [STDOUT] [MarkupContainer [Component id = form]]
15:58:17,477 INFO [STDOUT] [Page class = info.release.wicket.ReportDisplayByUserWithTaskTypeSort,id = 4,version = 0]
15:58:17,477 INFO [STDOUT] null
我的问题是:
\“ Component id = div \”和\“ Component id = column \”之后,\“ Component id = 0 \”的含义是什么,这个组件是什么?
最后一行的“ id = 4,version = 0 \”是什么意思?
解决方法
ID为0的组件是
ListItem
,它们的ID是它们在包含的ListView
中的索引。
每个页面都为每个会话分配了一个ID(\“ id = 4 \”),请参见页面的API文档中的\“ Identity \”段落。
每个页面的版本可能都支持后退按钮(\“ version = 0 \”),请参见页面的API文档中的“后退按钮\”段落。如果启用,则会话中每页将存储多个版本。新版本通常由表单提交触发。您可以使用forminput示例进行尝试,以不同的值多次提交表单,查看URL(可以看到递增的版本),然后尝试使用浏览器的后退按钮。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。