2017-12-15 6 views
0

で外部リンクを作成する方法テーブルセル内で、新しいブラウザタブで応答を示すWicket ExternalLinkを作成する必要があります。 私はこのコード(ウィケット7.9)を使用しました:Wicket:<a href="..." target="_blank"> 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); 
    } 
}); 

をしかし、改札はこれをレンダリングする:
<div onclick="window.location.href='http://www.geodata.com/maps?service=WFS&amp;request=GetCapabilities';return false;" target="_blank">Caps</div>

これは、新しいタブを開きません。

テーブルHTMLマークアップは、ウィケットによって生成されるので、私は、対応するマークアップで
<td><a wicket:id="link" href="..."></a></td>を挿入することはできません。

Wicketにはどのようにして<a href=" ... " target="_blank">Caps</a>を表示させることができますか?

また、onClick(Javascript)を使用しない場合は、新しいブラウザタブを作成するにはどうすればよいですか。

答えて

1

私はこの単純なマークアップでウィケットPanelの拡張を作成することによって、問題を解決:リンク用のJavascriptを作成していないため、<a wicket:id="link">ウィケットの

<!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> 

。 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")); 
    } 
}); 
+2

の違いは、あなたの質問にあなたの代わりに 'A'の' div'を使用することです。 WicketはJavaScriptを使用しています。また、 'target'属性はマークアップ –

+0

@ martin-gにあるかもしれません - リンクは' BootstrapDataTable'の中に置かれます。 'Panel'を使わずに' populateItem'を実装する際に ''を作成する方法はありますか? – JimHawkins

+0

私はあなたの最初の試みが失敗した理由を指摘しました。将来誰かが同じように直面するかもしれない。フラグメントの使用はより軽い解決策です。 'onBeforeRender'、' onComponentTag'、 'onAfterRender'だけを扱うこともできますが、Fragment/Panelよりも優れているかどうかは疑問です。 –

関連する問題