【问题标题】:Wicket page links do not use mounted URL coding strategy?Wicket 页面链接不使用挂载的 URL 编码策略?
【发布时间】:2011-01-05 22:11:32
【问题描述】:

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

mountBookmarkablePage("about", AboutPage.class);

我确认关于页面在 /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 类的目标链接,或者有没有办法获取类的挂载位置,以便我可以使用它来构建 AboutPage.class 的链接 url (而不是在 ExternalLink 构造函数中对其进行硬编码)?

【问题讨论】:

    标签: url hyperlink wicket


    【解决方案1】:

    为此,您应该使用BookmarkablePageLink(正如您所说的那样),设置链接标签(或任何其他内容) em> 只需调用 .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);
    

    它的构造函数。

    【讨论】:

      【解决方案2】:

      找到解决方案:BookmarkablePageLink 类

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

      这个方案只有一个小问题:不能设置链接标签,也许可以通过分配模型来完成。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多