2

このスレッドは質問ではありません。PortletURL の使用について Liferay フォーラムを調べていたときに提起された疑問です。

場合によっては、javascript メソッド内にこの PortletURL が表示されます。

function createRowURL() {
   var portletURL = new Liferay.PortletURL();
   portletURL.setParameter("rowNumber", "25" );
   return portletURL.toString();
}

場合によっては、次のようにdoViewメソッド内にこの PortletURL が表示されます。

currentURL を取得するには:

PortletURL url = PortletURLUtil.getCurrent(renderRequest, mimeResponse or renderResponse)

renderResponse から PortletURL を作成する:

  1. RenderURL の場合:

    PortletURL renderURL = renderResponse.createRenderURL(); 
    
  2. actionURL の場合:

    PortletURL actionURL = renderResponse.createActionURL();
    

PortletURL が役立つケースを教えてください。

4

1 に答える 1

9

ポートレット アプリケーションは、通常の Web アプリケーションとは異なります。ポートレットは、ポータルと呼ばれる親ページ内の小さなページであり、複数のポータルがブック (Weblogic 用語) になります。この状況では、通常の URL は機能しません。上記の理由とは別に、ポートレットにはさまざまな状態のライフ サークルがあります。どのポートレットが通信しているか、どの状態 (ポートレットのウィンドウ状態など) が最小化されているか、最大化されているか、通常の状態であるかを判断する手段をポートレット コンテナーに与える必要があります。もちろん、PortletUrl のもう 1 つの重要な機能は、要求パラメーターを運ぶことです。PortletURL を見ていると、指定した要求パラメータとともに多くの風変わりな名前が表示されるはずです。

PortletURL が必要とする情報のほとんどは多くの状況で共通ですが、PortletURL の構造は実装に依存し、Portlet コンテナーによって何らかの方法で生成されます。私の最後のライフレイ体験からしばらく経ちました。アプリケーションで liferay 固有の JavaScript を使用したことはありません。ポータル コンテナとの通信には、独自の javascript/ajax を使用しました。したがって、あなたが提示したJavaScriptの方法もライフレイ固有のものであり、異なるポータルフレームワーク間で移植できないと推測しています。

編集: @PrakashK からのコメントに従って、PortletURL のタイプとその違いと使用法を追加しました。

PortletURL には次の 2 つのタイプがあります。

  1. アクション URL。アクション リクエストとそれに続くレンダリング リクエストをトリガーします。
  2. URL をレンダリングすると、レンダリング リクエストがトリガーされます。

したがって、ActionURL の目的は、ボタンを押すなど、何らかのアクションをトリガーすることです。アクション リクエストはポートレット コンテナによってインターセプトされ、適切なアクション リクエスト ハンドラに送信されます。アクション リクエスト ハンドラは、アクション リクエストを処理し、レンダリング フェーズで使用される必要なレンダリング パラメータを設定します。ポートレットのライフ サイクルでは、レンダリング リクエストは常にアクション リクエストの後に続きます。一方、RenderURl は、その名前が示すように、主にポートレットをレンダリングするためのものです。

RenderURL の「レンダリング」の性質のため、JSR168 (ポートレット 1.0) では、動的に生成されたリソースをポートレットから直接提供できませんでした。唯一の回避策は、追加のサーブレットを使用してリソースを提供することです。このアプローチの最大の問題は、サーブレットがポートレットのライフサイクルに関与できないことです。同じポートレット Web アプリケーション内のリソースへの直接リンクは、ポータル サーバーを通過することが保証されておらず、ポートレット コンテキストを使用できません。これを克服するために、JSR286 (Portlet 2.0) では、リソース サービスと呼ばれる機能と ResourceURL と呼ばれる新しい種類の URL が導入され、ポートレットがリソースを動的にサービスできるようになりました。ResourceURL は、同じ BaseURL を拡張しますが、PortletURL ではありません。ResourceURL と ActionURL の最大の違いは、ResourceURL はレンダリング リクエストをトリガーしないことです。これにより、リソースへの Ajax リクエストが可能になります。

ポートレット 2.0 の詳細については、[JSR286]を参照してください。

上記の情報がお役に立てば幸いです。

于 2012-04-16T23:39:05.997 に答える