Wicket组件层次结构-getParent() [英] Wicket Component hierarchy - getParent()

查看:46
本文介绍了Wicket组件层次结构-getParent()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我做了一个实验。首先,我要声明html:

I did an experiment. First I want to state the 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);
        }
    }
}

片段中的链接为实例化为:

The link within the fragment is instantiating as:

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的输出:

The output for 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 = 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

我的问题是:


  • 组件后面的组件ID = 0是什么意思id = div和组件i d =列,这是什么组件?

  • 倒数第二行的 id = 4,version = 0是什么意思?

推荐答案

ID为0的组件是 ListItem s,其ID为在包含 ListView 的索引中。

The components with ID 0 are the ListItems, their ID is their index in the containing ListView.

每个会话的每个页面都分配了一个ID( id = 4) ,请参见页面的API文档

Each page is assigned an ID per session ("id = 4"), see the "Identity" paragraph in the API documention of Page.

每个页面的版本可能都支持后退按钮(版本= 0),请参见页面的API文档。如果启用,则会话中每页将存储多个版本。新版本通常由表单提交触发。您可以使用 forminput示例进行尝试,多次提交具有不同值的表单,看看URL(可以看到递增版本),然后尝试使用浏览器的后退按钮。

Each page may be versioned for back button support ("version = 0"), see the "Back Button" paragraph in the API documention of Page. If enabled, multiple versions per page are stored in the session. New versions are usually triggered by form submits. You may try it with the forminput example, submit the form multiple times with different values, take a look at the URL (where you can see the increasing version) and try the back button of your browser.

这篇关于Wicket组件层次结构-getParent()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆