2

セッションマネージドBeanを削除する方法があります

public void invalidMyBean()
{
    final Map<String, Object> sessionMap = FaceContext.getCurrentInstance().getExternalContext().getSessionMap();
    sessionMap.remove("mySessionBean");
}

invalidMyBean() も Web サービスから呼び出されます。この場合、FaceContext.getCurrentInstance() は null であり、Bean を削除できません。クラスのフィールドとして sessionMap を保存しようとしましたが、このオブジェクトからの削除が機能しません。faceContext の外部で sessionMap を取得する方法はありますか?

どうも

4

2 に答える 2

2

ExternalContext#getSessionMap()単なる抽象化ですHttpSession#get/set/removeAttribute()。したがって、サーブレットコンテナ (フィルター、サーブレット、Web サービスなど) のどこにいても、具体的なHttpSessionインスタンスを手に入れれば、それを使用できるはずですsession.removeAttribute("mySessionBean")

これは明らかに、WebサービスがJSFアプリケーションと同じHTTPセッションを使用してリクエストされた場合にのみ機能することに注意してください(この質問の仕方は、HTTPセッションがどのように機能するかをまったく理解していないようですが、そうではないことを示唆しています)。

于 2012-11-15T14:32:51.977 に答える
0

私は、同じHttpSessionを共有するJSFページでアプレットの作業コードを提供することに答えます。アプレットは、JAX-WSを使用してサーバー上のWebサービスと通信します。

JSFページ:

<applet ..>
<param name="commonSessionId" value="#{session.id}" />
Distance Sensor [Your browser doesn&rsquo;t seem to support Java applets.]
</applet>

アプレットのinit():

@Override
public void init()
{
    ...
    commonSessionId = getParameter("commonSessionId");
    port = service.getWsAppletPort();
    final Map<String, Object> map = new HashMap<String, Object>();
    map.put("Cookie", Collections.singletonList("JSESSIONID=" + commonSessionId));
    final Map<String, Object> requestContext = ((BindingProvider) port).getRequestContext();
    requestContext.put(MessageContext.HTTP_REQUEST_HEADERS, map);
    requestContext.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, Boolean.TRUE);
}

BalusCの多大な支援に改めて感謝します!!

于 2012-11-15T22:33:19.597 に答える