Wicket页面链接不使用挂载的URL编码策略?

mjn*_*mjn 1 url wicket hyperlink

在Wicket Application类中,我在location/about处安装了一个页面

mountBookmarkablePage("about", AboutPage.class);
Run Code Online (Sandbox Code Playgroud)

我验证了about页面是否可用于/ about.然后在需要链接到about页面的页面中,我使用Wicket Link类:

add(new Link("link") {

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

        };
)
Run Code Online (Sandbox Code Playgroud)

链接按预期工作,但当鼠标悬停在链接上时,目标URL显示在浏览器状态栏中

http://localhost:8080/?wicket:interface=:0:linkpage:repeating:1:link::ILinkListener::
Run Code Online (Sandbox Code Playgroud)

我找到的解决方法是使用ExternalLink

new ExternalLink("link", "/about", "about");
Run Code Online (Sandbox Code Playgroud)

这会将目标URL更改为

http://localhost:8080/about
Run Code Online (Sandbox Code Playgroud)

当鼠标悬停在链接上时,它显示在浏览器状态栏中.

有没有办法使用挂载的URL作为Wicket Link类的目标链接,或者有没有办法获取类的挂载位置,以便我可以使用它来构建AboutPage.class的链接URL(而不是在ExternalLink构造函数中对其进行硬编码)?

Esk*_*sko 5

为此,您应该使用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);
Run Code Online (Sandbox Code Playgroud)

和匹配的标记

<a wicket:id="link"><span wicket:id="linkText">Link text goes here</span></a>
Run Code Online (Sandbox Code Playgroud)

Yeppers,它稍微冗长,但也很容易扩展.如果你愿意,你可以创建自己方便的子类BookmarkablePageLinkBookmarkableTextLink,有一个

new BookmarkableTextLink(String id, Class<Page> pageClass, String linkText);
Run Code Online (Sandbox Code Playgroud)

它的构造函数.