Wicket:如何使用创建ExternalLink

问题描述 投票:0回答:1

在表格单元格中,我必须创建一个Wicket ExternalLink,在新的浏览器选项卡中显示响应。我用过这段代码(Wicket 7.9):

columns.add(new AbstractColumn<WebService, String>(Model.of(" "))
{
    @Override
    public void populateItem(Item<ICellPopulator<WebService>> cellItem, String componentId,
            IModel<WebService> serviceModel)
    {
        WebService ows = serviceModel.getObject();
        String url = "http://www.geodata.com/map?service=WMS&request=GetCapabilities";
        ExternalLink capabilitiesLink =
                new ExternalLink(componentId, Model.of(url), Model.of("Caps"))
                {
                    @Override
                    protected void onComponentTag(ComponentTag tag)
                    {
                        super.onComponentTag(tag);
                        tag.put("target", "_blank");
                    }
                };
        cellItem.add(capabilitiesLink);
    }
});

但Wicket提出这个: <div onclick="window.location.href='http://www.geodata.com/maps?service=WFS&amp;request=GetCapabilities';return false;" target="_blank">Caps</div>

这不会打开新选项卡。

表格HTML标记由Wicket生成,因此我无法插入 <td><a wicket:id="link" href="..."></a></td>在相应的标记中。

我如何强制Wicket渲染<a href=" ... " target="_blank">Caps</a>

或者,当我无法避免使用onClick(Javascript)时,如何创建新的浏览器选项卡?

java wicket
1个回答
1
投票

我用这个简单的标记创建了Wickets Panel的扩展来解决这个问题:

<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<head>
    <meta charset="UTF-8">
</head>
<body>
<wicket:panel>
    <a wicket:id="link"></a>
</wicket:panel>
</body>
</html>

由于<a wicket:id="link"> Wicket不为链接创建Javascript。

对应的Java:

public class LinkTargetBlankPanel extends Panel
{
    private static final long serialVersionUID = -6527814402202345257L;

    public LinkTargetBlankPanel(String id, String url, String label)
    {
        super(id);
        add(new ExternalLink("link", url, label)
        {
            private static final long serialVersionUID = -8010560272317354356L;

            @Override
            protected void onComponentTag(ComponentTag tag)
            {
                super.onComponentTag(tag);
                tag.put("target", "_blank");
            }
        });
    }
}

并在创建表列的代码中:

columns.add(new AbstractColumn<WebService, String>(Model.of(" "))
{
    @Override
    public void populateItem(Item<ICellPopulator<WebService>> cellItem, String componentId,
            IModel<WebService> serviceModel)
    {
        String url = "http://www.geodata.com/map?service=WMS&request=GetCapabilities";
        cellItem.add(new LinkTargetBlankPanel("link", url, "GetCapabilities"));
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.