2017-10-16 6 views
0

いくつかの情報を管理するサーブレットを作成する必要があります。その後、Liferay 6.2ポートレットに移動します。両方とも同じサーバー内にあります。セッションを使用してLiferayポートレットにパラメータを送信する

パラメータを送信するにはサーブレットが必要ですが、GET、POSTメソッドは送信しません。したがって、ポートレットから取得するためにセッションに入れようとします。サーブレットで

は、私が持っている:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    try { 
     request.getSession().setAttribute("param1", "TEST 1"); 
     url = "http://myServer/"; 
     response.sendRedirect(response.encodeRedirectURL(url)); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

そして私は、私はページをレンダリングする前のparam1を取得したいと私は、レンダリング方法で情報を管理ポートレットで:

public void render (RenderRequest renderRequest, RenderResponse renderResponse) 
     throws PortletException, IOException { 
    super.render(renderRequest, renderResponse); 
    //Try to retrieve from getOriginalServletRequest 
    HttpServletRequest servletReq = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(renderRequest)); 
    String param1 = servletReq.getSession().getAttribute("param1").toString(); 
    //Try to retrieve from getHttpServletRequest 
    HttpServletRequest servletReq_ = PortalUtil.getHttpServletRequest(renderRequest); 
    String param1_ = servletReq_.getSession().getAttribute("param1").toString(); 
} 

ように私はgetHttpServletRequestとgetOriginalServletRequestから取得しようとしましたが、私は常にparam1 nullを取得します。

提案がありますか? ありがとうございます!

アップデート質問:

私は第三部から呼び出されている、と私は私は評価したいGETパラメータを受信して​​います。

その後、ページを中央に表示しないで、その評価に応じて、1つまたは別のポートレットにリダイレクトしたいと考えています。

これらのポートレットに個人情報を送信する必要があるため、POSTメソッドでいくつかのパラメータを送信します。

サーブレットは、ポートレットとのセッションを共有しないため、適合しません。

私は着陸ポートレットを実装しようとしましたが、リダイレクトはアクションフェーズでしか実行できないため、リダイレクトの前に(空の)ページをレンダリングする必要があります。レンダリングフェーズではリダイレクトは許可されません(PortalUtil.getHttpServletResponse()を取得しても動作しません)

提案がありますか?ありがとう!

+0

編集では、私の答えの下にあるすべてのコメントを読まなくても状況がより明確になるわけではありません(さらには、わかりやすく混乱します)。私は完全なビジネス要件とこれまでのやり方で別の質問を開始することをお勧めします。限り、私は懸念している、私は最初の質問に答えていると考えており、更新は別の質問です。しかし、その部分をコピー/貼り付けするのではなく、コードとともに要件の説明を与えてください。 –

答えて

2

サーブレットとポートレットは、同じセッションを共有しません。ポートレットは、ポータルサーバ内に存在する。 Liferay。サーブレットは通常、独自のWebアプリケーション内にあり、設計によって完全に分離されています。あなたが両者の間で通信する必要がある場合

、ここでは2つの解決策/回避策は以下のとおりです。

  • はリクエストパラメータを使用して、潜在的にポートレット
  • の資源相を利用し、ポートレットとしてサーブレットを再実装します代わりに、セッション属性の

編集コメントのすべての後に:

バックステップを取ると見て最善と思われます根本的な問題 - あなたが実際に解決しようとしている問題は何ですか?あなたの質問の内容はです。どのようにあなたはそれを解決しようとしています、明らかに課題があります。最初は問題が別の解決策を必要としているようです。あなたのソリューションが動作しないことができる理由

私の答えはを説明したが、それは明らかにが根本的な問題を解決する助けにはなりません。

+0

ありがとうございます。 私はセッションが共有されないと思っていましたが、メソッドgetHttpServletRequestは私にいくつかの希望を与えました:) サーブレットがポートレットであると思ったので、このテストを遅らせていました。ポートレット全体ではなく単一のポートレットで作業するので、別のページを作成して別のページに移動することはできません。 – Marta

+0

request.setAttribute( "param1"、 "TEST 1")を使用しようとしましたが、リクエストパラメータを簡単に設定するにはどうすればよいですか?リクエストオブジェクトはsetParameter()呼び出しを許可していないので、ラッパーの構築については読んだだけです... – Marta

+0

私もresponse.addCookie()で試してみましたが、ポートレットにはどちらも届きませんでした:( – Marta

関連する問題