Ссылки на страницы калитки не используют стратегию кодирования смонтированных URL-адресов?

В классе приложения Wicket я смонтировал страницу по адресу /about

mountBookmarkablePage("about", AboutPage.class);

Я проверяю, доступна ли страница about в /about. Затем на странице, которой нужна ссылка на страницу about, я использую класс Wicket Link:

add(new Link("link") {

            @Override
            public void onClick() {
                setResponsePage(AboutPage.class);
            }

        };
)

Ссылки работают, как и ожидалось, но целевой URL-адрес, отображаемый в строке состояния браузера, когда указатель мыши находится над ссылкой, выглядит так:

http://localhost:8080/?wicket:interface=:0:linkpage:repeating:1:link::ILinkListener::

Обходной путь, который я нашел, - использовать ExternalLink

new ExternalLink("link", "/about", "about");

Это изменяет целевой URL на

http://localhost:8080/about

который отображается в строке состояния браузера при наведении указателя мыши на ссылку.

Есть ли способ использовать смонтированный URL-адрес в качестве целевой ссылки с классом Wicket Link или есть способ получить местоположение монтирования для класса, чтобы я мог использовать его для создания URL-адреса ссылки для AboutPage.class (вместо жестко кодировать его в конструкторе ExternalLink)?


person mjn    schedule 16.01.2010    source источник


Ответы (2)


Для этого следует использовать BookmarkablePageLink (как вы говорите, что делаете), чтобы установить метку ссылки (или любой другой контент в этом отношении), просто вызовите .add(Component... c), так как BookmarkablePageLink на самом деле MarkupContainer.

Итак, чтобы создать ссылку на AboutPage.class нужно сделать так:

BookmarkablePageLink aboutLink = new BookmarkablePageLink("link", AboutPage.class);
aboutLink.add(new Label("linkText", "Go to About page"));
add(aboutLink);

и соответствующая разметка

<a wicket:id="link"><span wicket:id="linkText">Link text goes here</span></a>

Да, он немного более подробный, но также очень легко расширяемый. Если вы хотите, вы можете создать свой собственный удобный подкласс BookmarkablePageLink с именем BookmarkableTextLink и иметь

new BookmarkableTextLink(String id, Class<Page> pageClass, String linkText);

конструктор для него.

person Esko    schedule 16.01.2010

Нашел решение: класс BookmarkablePageLink

add(new BookmarkablePageLink("link", AboutPage.class));

У этого решения есть только небольшая проблема: нельзя установить метку ссылки, возможно, это можно сделать, назначив модель.

person mjn    schedule 16.01.2010