2012-03-08 18 views
1

ポートレットがWebアプリケーションの場合、(要求スコープの)ServletRequestからポートレットの環境設定が取得されるのはなぜですか?Liferayでポートレットの設定を正しく行う方法は?

http://docs.liferay.com/portal/6.1/javadocs/com/liferay/portal/util/PortalUtil.html#getPreferences(javax.servlet.http.HttpServletRequest

それはどのように設定がアプリケーションスコープでオブジェクトを取ることが可能ですか?

UPDATE 1

私は次のようにポートレット設定を取得しています。それが正しいか?以下のprefsメンバーは適用範囲にあります。

private synchronized void setupPreferences(HttpServletRequest request) { 
    // creating preferences 
    if(prefs == null) { 

     prefs = PortalUtil.getPreferences(request); 
     if(prefs != null) { 
      System.out.println("Preferences were taken from request"); 
     } 

     String portletResource = ParamUtil.getString(request, "portletResource"); 
     if (Validator.isNotNull(portletResource)) { 
      try { 
       System.out.println("Replacing preferences from 'portletRecource' parameter"); 
       prefs = PortletPreferencesFactoryUtil.getPortletSetup(request, portletResource); 
      } catch (SystemException e) { 
       e.printStackTrace(); 
      } catch (PortalException e) { 
       e.printStackTrace(); 
      } 
     } 

     if(prefs == null) { 
      System.out.println("Preferences were NOT obtained yet"); 
     } 
     else { 
      System.out.println("Preferences are OK"); 
     } 

    } 
} 

UPDATE 2

私は自分のアプリケーションでも、サーブレットや静的オブジェクトを使用しています。静的オブジェクトはアプリケーションスコープ内にあります。いくつかの静的オブジェクトにポートレット環境設定オブジェクトを保持することができますか、または毎回要求から再取得する必要がありますか?

実際に私はすでにこれを仮定していますが、動作しますが、正しいことを知りたいですか?

答えて

1

私は、Liferayのサブクラスではないと推測していますMVCPortletクラス?とにかく

は、最初にsetupPreferencesにあなたがのうちのHttpServletRequestを得ているPortletRequestオブジェクトを渡しているリクエストオブジェクトのですか?

PortletRequest.getPreferences();

+0

'request'オブジェクトは、通常のサーブレットに渡す' PortletRequest'または通常の 'HttpServletRequest'の両方になります。 – Dims

6
com.liferay.portal.util.PortalUtil.getPreferences(HttpServletRequest) 

は単なる実用的な方法です。

あなたは、実装を見てみた場合、あなたはあなたのハンドラでは

​​

に何が起こっているかがわかりますあなたは/)(request.getPreferencesを使用する必要がありますすることができます。 「要求」は、PortletRequest、RenderRequest、ActionRequest、ResourceRequestの実装です。

UPDATW:

あなたがサーブレットから特定のポートレットprefernecesにアクセスする必要がある場合、あなたは

com.liferay.portlet.PortletPreferencesFactoryUtil.getPortletSetup(HttpServletRequest p_request, String p_portletId) 

と試みることができるそれは静的メソッドである、とPortletPreferencesを返すので、ポートレットのIDを知り、リクエストオブジェクトを持ちますあなたは好みを得ることができるはずです。

+0

とにかくあなたの例では、好みはさまざまな種類のリクエストから取られます。これは、プリファレンスが要求範囲であることを意味しますか?私のアプリケーションでは、ポートレットのレンダリングだけでなく、他の場所からも環境設定にアクセスする必要があります。 – Dims

+0

はい、ポートレット設定はポートレット要求に格納されます。レンダリング、アクション、リソースハンドラ、またはリクエストに渡すその他の方法でそれらにアクセスできます。 「他の場所」とはどういう意味ですか?質問を更新してください。 –

+0

なぜアプリケーションスコープであれば、要求に応じて保存されるのでしょうか? "その他の場所"はサーブレットと静的オブジェクトで、私は質問を更新しました。 – Dims

関連する問題