0

struts ポートレット ブリッジを使用して、struts 1.2.9 に基づく JSR-286 準拠のポートレットを開発しています (歴史的な理由から、多くの既存のコードを再利用したいと考えています)。いくつかのリンクで WindowState を変更したいのですが、ポータル ブリッジが提供する FormTag と LinkTag には WindowState を設定する簡単な方法がありません。これら 2 つのタグを喜んで拡張しますが、続行する方法がわかりません。どのリクエスト パラメータをポータルに依存しない方法で追加する必要があるかを判断するにはどうすればよいですか?

4

1 に答える 1

2

まあ、私自身の質問に答えるかもしれません:-)

Struts ブリッジ コードに基づいて (拡張ではなく)、独自のバージョンの TagsSupport、FormTag、および LinkTag を作成する必要がありました。

メソッド TagsSupport.getUrl() と TagsSupport.getFormTagRenderFormStartElement() を変更して、WindowState パラメーターを受け取り、レンダリング URL とアクション URL の作成時にそれを使用するようにしました。

public static String getURL(PageContext pageContext, String url, PortletURLTypes.URLType type, WindowState ws)
...
    if ( type.equals(PortletURLTypes.URLType.ACTION) )
    {
      final PortletURL portletURL = StrutsPortletURL.createActionURL(pageContext.getRequest(), url);
      if (ws!=null) {
        try {
          portletURL.setWindowState(ws);
        }
        catch (WindowStateException e) {
          e.printStackTrace();
        }
      }
      return portletURL.toString();
    }
    else if ( type.equals(PortletURLTypes.URLType.RENDER) )
    {
      final PortletURL portletURL = StrutsPortletURL.createRenderURL(pageContext.getRequest(), url);
      if (ws!=null) {
        try {
          portletURL.setWindowState(ws);
        }
        catch (WindowStateException e) {
          e.printStackTrace();
        }
      }
      return portletURL.toString();
    }
...

public static String getFormTagRenderFormStartElement(PageContext pageContext, String formStartElement, WindowState ws)
{
    if ( PortletServlet.isPortletRequest(pageContext.getRequest()))
    {
        int actionURLStart = formStartElement.indexOf("action=") + 8;
        int actionURLEnd = formStartElement.indexOf('"', actionURLStart);
        String actionURL = formStartElement.substring(actionURLStart,
                actionURLEnd);
      final PortletURL portletURL = StrutsPortletURL.createActionURL(pageContext.getRequest(),
                                                                    actionURL);
      if (ws!=null) {
        try {
          portletURL.setWindowState(ws);
        }
        catch (WindowStateException e) {
          e.printStackTrace();
        }
      }
      formStartElement = formStartElement.substring(0, actionURLStart)
                + portletURL.toString()
                + formStartElement.substring(actionURLEnd);
    }
    return formStartElement;
}

次に、FormTag と LinkTag を変更して WindowState 属性を受け取り、それを TagsSupport のメソッドに渡します。

private String windowState;

public String getWindowState() {
    return windowState;
}

public void setWindowState(String windowState) {
    this.windowState = windowState;
}

url = TagsSupport.getURL(pageContext, url, urlType, new WindowState(getWindowState()));

明らかに、変更したタグを参照するには tld が必要でした。

これは、パッチPB-91 (ポートレット モードを変更するための修正も組み込まれています) として Struts ブリッジ プロジェクトに提供されています。

于 2009-06-24T08:57:54.333 に答える