在表格单元格中,我必须创建一个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&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"));
}
});