繁体   English   中英

Wicket 组件层次结构 - getParent()

[英]Wicket Component hierarchy - getParent()

我做了一个实验。 首先我要 state 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>
            &nbsp;
        </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 的 output:

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 = 0]]
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中的索引。

每个页面都根据 session(“id = 4”)分配一个 ID,请参阅Page 的 API 文档中的“身份”段落。

每个页面都可以为后退按钮支持进行版本控制(“version = 0”),请参阅Page 的 API 文档中的“后退按钮”段落。 如果启用,每个页面的多个版本将存储在 session 中。 新版本通常由表单提交触发。 您可以尝试使用forminput 示例,使用不同的值多次提交表单,查看 URL(您可以看到增加的版本)并尝试浏览器的后退按钮。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM