ポータル: Liferay 6.0
私のポートレットでは、ログインするすべてのユーザーが利用できるように、application_Scope でオブジェクトを維持する必要があります。解決策として、PortletContext を使用する必要があると思いました。したがって、私は先に進み、このようにポートレットコンテキストに保存しました
PortletContext context = renderRequest.getPortletSession().getPortletContext();
context.setAttribute("attr1", "test");
ユーザーがログアウトしたときに、コンテキストからこのオブジェクトを操作したいので、servlet.session.destroy.events をキャプチャするフックを作成しました。コードは次のようになります
public class MySessionDestroyAction extends SessionAction {
@Override
public void run(HttpSession session) throws ActionException {
ServletContext context = session.getServletContext();
String temp = (String) context.getAttribute("attr1");
context.
}
}
上記のクラスには HttpSession オブジェクトがあるため、ポートレット コンテキストではなくサーブレット コンテキストを取得できますが、ポートレットで設定した属性値を取得できませんでした。
オブジェクトを Servletcontext に設定してから試してみるべきだと思いました。そのために、ポートレットでコードを変更して、このように PortalUtil クラスからサーブレット コンテキスト オブジェクトを取得しました。
HttpServletRequest httpReq = PortalUtil.getHttpServletRequest(request);
ServletContext scontext = httpReq.getSession().getServletContext();
scontext.setAttribute("attr1", "test");
この MySessionDestroyAction クラスを実行した後でも、コンテキスト属性は取得されません。誰でもこの動作を説明できますか? また、これが正しい実装方法でない場合は、誰でもどのアプローチを使用すべきかを提案できます。
ありがとうございました