Innerhalb einer Tabellenzelle muss ich ein Wicket ExternalLink
erstellen, das die Antwort in einem neuen Browser Tab zeigt. Ich habe diesen Code (Wicket 7.9) verwendet:Wicket: Wie erstellt man ExternalLink mit <a href="..." target="_blank">
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);
}
});
Aber Wicket macht dies:
<div onclick="window.location.href='http://www.geodata.com/maps?service=WFS&request=GetCapabilities';return false;" target="_blank">Caps</div>
Dies lässt sich nicht öffnen Sie einen neuen Tab.
Die Tabelle HTML-Markup wird von Wicket generiert, daher kann ich
<td><a wicket:id="link" href="..."></a></td>
nicht in die entsprechende Markup einfügen.
Wie kann ich Wicket zum Rendern <a href=" ... " target="_blank">Caps</a>
zwingen?
Alternativ, wie kann ich einen neuen Browser Tab erstellen, wenn ich nicht vermeiden kann, onClick
(Javascript) zu verwenden?
Der Unterschied ist, dass Sie in Ihrer Frage verwenden, um ein 'div' statt' a'. Deshalb verwendet Wicket JavaScript. Auch das Attribut 'target' könnte im Markup –
@ martin-g enthalten sein - der Link befindet sich in einer 'BootstrapDataTable'. Gibt es eine Möglichkeit, 'in meiner Implementierung von' populateItem' zu erstellen, ohne ein 'Panel' zu verwenden? – JimHawkins
Ich habe gerade darauf hingewiesen, warum Ihr erster Versuch scheiterte. Vielleicht ist jemand in Zukunft gleich. Die Verwendung eines Fragments ist eine leichtere Lösung. Es ist auch möglich, nur mit 'onBeforeRender',' onComponentTag' und 'onAfterRender' zu arbeiten, aber es ist fraglich, ob es besser ist als Fragment/Panel. –