1

ポータル: 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 クラスを実行した後でも、コンテキスト属性は取得されません。誰でもこの動作を説明できますか? また、これが正しい実装方法でない場合は、誰でもどのアプローチを使用すべきかを提案できます。

ありがとうございました

4

0 に答える 0