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构造函数中对其进行硬编码)?
为此,您应该使用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,它稍微冗长,但也很容易扩展.如果你愿意,你可以创建自己方便的子类BookmarkablePageLink
叫BookmarkableTextLink
,有一个
new BookmarkableTextLink(String id, Class<Page> pageClass, String linkText);
Run Code Online (Sandbox Code Playgroud)
它的构造函数.