4

メソッドprocessAction(ActionRequest request, ActionResponse response)では、レコードをデータベースに挿入して取得し、IDこのレコードのビュー ページにリダイレクトしたいと考えています。RenderURLそのため、その ID のパラメーター値を使用して を作成する必要があります。

ActionResponseを作成する方法を提供しませんrenderURL。Liferay の一部のコードは、次のような同様のことを行います。

  1. renderURLにアクセスする前に作成するactionURL
  2. renderURLをパラメータとして渡しますactionURL

しかし、その時点では の値はわかりませんID

他のコードもnew PortletURLImpl()直接使用します。私のポートレットはそのクラスを見ることができません。

4

4 に答える 4

2

他のコードも新しいPortletURLImpl()を直接使用します。私のポートレットはそのクラスを見ることができません。

このクラスが含まれportal-impl.jarているため、このjarのクラスを使用することはお勧めしません。Liferay 6.1以降、クラスがを指している場合、plugins-sdkからポートレットを構築することはできなくなりますportal-impl.jar

今あなたの質問に答えるために:

すべてのjspは、 1renderつまたは複数のdoViewメソッド(liferayを使用している場合MVCPortlet)によってレンダリングされ、このメソッドは、ポートレットの通常のライフサイクルの一部として呼び出されます。

実行する必要のある手順は次のとおりです。

  1. 次のように、最後に `processAction'メソッドでレンダリングパラメータを設定します(response.setRenderParameter()メソッドを使用)。これは、renderメソッドで使用できます。

    actionResponse.setRenderParameter("myID", 1201);
    

    情報のためだけに:使用後はメソッドsetRenderParameterを使用できませんsendRedirect

  2. 他のリクエストパラメータをフェッチするときに、renderメソッドでこれ"myID"をフェッチします。

    //assuming your ID is a long
    long myUserName = ParamUtil.getLong(renderRequest, "myID");
    

    また

    String strMyID = renderRequest.getParameter("myID");
    long myID = Long.parseLong(strMyID);
    
  3. この後、使用するだけ

    include(renderPage, renderRequest, renderResponse);
    

    は、次のようrenderPageにjspへのパスを含む文字列に他なりません。docroot/html/yourportlet/view.jsp

    後付けと同じように:
    Liferay IDEを使用している場合は、を使用して単純なポートレットプロジェクトを作成してからMVCPortlet、生成されたportlet.xml<init-param>

したがって、基本的には、アクションフェーズからレンダリングフェーズに情報を渡す必要があります。開発ガイドは、これを詳細に説明するのに適した場所です。

それでおしまい。
お役に立てれば。

これに関して何か混乱があれば教えてください。

于 2012-11-01T06:25:06.180 に答える
2

アクションフェーズでは、次のことを行います。

ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute (WebKeys.THEME_DISPLAY);
PortletURL url = PortletURLFactoryUtil.create(request, this.getPortletName(), themeDisplay.getPlid(), PortletRequest.RENDER_PHASE);

たとえば、ログイン ページにリダイレクトして戻る場合は、次のようにします。

response.sendRedirect("/c/portal/login?redirect=" + HttpUtil.encodeURL(url.toString()));

もちろん、必要に応じてパラメータを追加またはコピーできます。

于 2012-12-05T22:53:27.980 に答える
0

renderURL を作成する代わりに、ビュー ページの include(viewTemplate,actionRequest,actionResponse) を含めることができます。または、任意のパラメーターを送信して doView で取得したい場合は、 actionResponse.setParameter(name,value) メソッドを使用します

于 2012-11-01T05:15:37.143 に答える
-1

RenderURL次のように、プレースホルダーをパラメーター値として作成します。

   <portlet:renderURL var="redirect">
      <portlet:param name="ID" value="__ID__" />
   </portlet:renderURL>`

processAction

    String redirect = redirectParam.replace("__ID__", "123213");
    actionResponse.sendRedirect(redirect) ;
于 2012-11-02T09:55:10.123 に答える