0

JSF 2ポートレットを開発していますが、グローバルセッション変数を取得する必要があります。

リクエストは次の場合に正常に機能します。

FacesContext facesContext = FacesContext.getCurrentInstance();
    PortletRequest request = (PortletRequest) facesContext.getExternalContext().getRequest();

しかし、セッションはnullです:

PortletSession session = request.getPortletSession(false);

このコードをliferay-portlet.xmlファイルに入れると正常に機能しますが、IPCを実行できません:ポートレット間通信

<!-- Portlet session -->
    <private-request-attributes>false</private-request-attributes>
    <private-session-attributes>false</private-session-attributes>

最後のコードを使用せずに変数セッションを取得および設定するにはどうすればよいですか?

ありがとう

今日iiはこれで試しました:

FacesContext facesContext = FacesContext.getCurrentInstance(); 
PortletRequest request = (PortletRequest) facesContext.getExternalContext().getRequest(); 
HttpServletRequest httpRequest = PortalUtil.getHttpServletRequest(request); 
HttpSession session = httpRequest.getSession(true); 
System.out.println(session.getAttribute("XXXX"));

しかしnullです

4

4 に答える 4

4

警告:<private-session-attributes>false</private-session-attributes>Liferay Facesで使用すると、メモリリークが発生することが知られています。自己責任!

再注文するとうまくいきます!

<portlet>
    <portlet-name>distribution</portlet-name>
    <icon>/icon.png</icon>
    <instanceable>false</instanceable>
    <private-session-attributes>false</private-session-attributes>
            ...
            ...
            ...
            ...
于 2012-11-10T16:34:36.153 に答える
1

2つのオプションがあります:

1)PortletSessionで属性を設定するときは、このメソッドpublic void setAttribute(String name、Object value、int scope)を使用します。スコープは次のようになります。PortletSession.APPLICATION_SCOPE

これを行うときは、これをあなたのに変更してくださいliferay-portlet.xml

<private-request-attributes>false</private-request-attributes>
<private-session-attributes>false</private-session-attributes>

警告:<private-session-attributes>false</private-session-attributes>Liferay Facesで使用すると、メモリリークが発生することが知られています。自己責任!

2)HttpSessionの代わりにを使用して、PortletSessionを取得するにはHttpSession、を使用PortalUtil.getHttpServletRequest(portletRequest)して、httpServletRequestからHttpSessionを取得してください。

お役に立てれば。

ありがとう

于 2012-06-04T09:07:49.200 に答える
1

警告:<private-session-attributes>false</private-session-attributes>Liferay Facesで使用すると、メモリリークが発生することが知られています。自己責任!

liferay-portlet.xmlの設定に関する問題を解決しました

1.)liferay-portlet.xmlを変更したのは次の場合のみです。

<private-session-attributes>false</private-session-attributes>

2.)Javaクラスで、メソッドを作成しました。

FacesContext facesContext = FacesContext.getCurrentInstance();
PortletRequest request = (PortletRequest) facesContext.getExternalContext().getRequest();
PortletSession session = request.getPortletSession(false);

セッション属性を取得する場合

session.getAttribute("XXXXXX",PortletSession.APPLICATION_SCOPE);

セッション属性を設定した場合

session.setAttribute("NAME","VALUE",PortletSession.APPLICATION_SCOPE);
于 2012-07-06T21:51:24.473 に答える
0

Christyの2番目のオプションは私のために働きました。設定すると

<private-session-attributes>false</private-session-attributes>

ポートレットのデプロイが失敗します。xmlファイルの解析中にエラーが発生しました。

どうしてか分かりません。Liferayバージョン6.1.1

于 2012-09-13T07:40:54.087 に答える