创建外部链接-6ren"> 创建外部链接-在表格单元格内,我必须创建一个 Wicket ExternalLink在新的浏览器选项卡中显示响应。我使用过这段代码(Wicket 7.9): columns.add(new AbstractColu-6ren">
gpt4 book ai didi

java - Wicket:如何使用 创建外部链接

转载 作者:行者123 更新时间:2023-12-02 11:51:43 25 4
gpt4 key购买 nike

在表格单元格内,我必须创建一个 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)?

最佳答案

我通过创建 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"));
}
});

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com