Калитка: панель, вложенная как компонент - PullRequest
0 голосов
/ 02 июня 2018

Возможно ли (или как лучше всего) иметь собственную панель с поведением компонентов?Особенно с вложением HTML ...

Я хочу что-то вроде этого:

    public HeaderPanel(String id) { /* extends Wicket Panel */
        super(id);

        add(new Link(ID_HOME_LINK, null) {
            private static final long serialVersionUID = 1L;

            {
                add(new Image(ID_HOME_LOGO, new ContextRelativeResource("img/logo.png")));              
            }

            @Override
            public void onClick(AjaxRequestTarget target) {
                setResponsePage(((BasicPage)getPage()).getLogoLinkPage());
            }
        });      
    }

С HTML:

<!DOCTYPE html>
<html>
    <body>
        <wicket:panel>
             <a wicket:id="home-link">
                <img wicket:id="home-logo" src="img/logo.png" title="LearnMe" style="max-height: 65px;" />  <!-- HERE is problem - I would like to set children here -->
             </a>
        </wicket:panel>
    </body>
</html>

И это намерение в Link (этомоя "настраиваемая" панель, которая обрабатывает ссылки):

public Link(String id, IModel<String> model, boolean ajax) { /* Extends Wicket Panel */
        super(id);
        this.ajax = ajax;
        this.model = model;

        setRenderBodyOnly(true);

         if (ajax) {        
                add(link = new AjaxLink<String>(ID_LINK) {

                    @Override   
                    public void onClick(AjaxRequestTarget target) {
                        Link.this.onClick(target);                  
                    }
                });
            } else {
                add(link = new org.apache.wicket.markup.html.link.Link<String>(ID_LINK) {

                    @Override
                    public void onClick() {
                        Link.this.onClick(null);    
                    }
                });
            }
    }

С соответствующим HTML:

<html>
    <body>
        <wicket:panel>
            <a wicket:id="link"></a> <!-- HERE is problem - I don't know, which ones and how many components go there  -->
        </wicket:panel>
    </body>
</html>

Теперь я получаю это исключение:

Last cause: Close tag not found for tag: <a wicket:id="home-link" id="home_link3">. For  Components only raw markup is allow in between the tags but not other Wicket Component. Component: [Link [Component id = home-link]]

Может быть, ячто-то не так с емкостью Panel или что-то ненужное с компонентом Link, но я ищу идею вложения / наследования панелей в одном шаблоне, как это обычно бывает с компонентами в Wicket (например, ссылка HeaderPanel была Wicket Link, а не моя настраиваемая панель "Link" -это работает, но это не "общее" решение).

1 Ответ

0 голосов
/ 08 июня 2018

Ваша проблема в Link.html.Там у вас есть <a wicket:id="link" для ссылки калитки, но у вас нет HTML-элемента для изображения.Определенный в HeaderPanel.html полностью переопределяется разметкой, предоставленной (вашим) Link.html.

...