【问题标题】:retrieve FacesContext sessionMap from an other context从其他上下文中检索 FacesContext sessionMap
【发布时间】:2012-11-15 14:22:17
【问题描述】:

我有一个方法可以删除会话管理的 bean

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

invalidMyBean() 也从 Web 服务调用。 在这种情况下 FaceContext.getCurrentInstance() 为空,我无法删除我的 bean。 我试图将 sessionMap 作为一个字段存储在我的类中,但是从这个对象中删除是行不通的。 有没有办法从 faceContext 外部检索 sessionMap ?

谢谢

【问题讨论】:

    标签: jsf-2


    【解决方案1】:

    ExternalContext#getSessionMap() 只是HttpSession#get/set/removeAttribute() 的抽象。因此,无论您在 servletcontainer(过滤器、servlet、webservice 等什么)中,一旦您掌握了具体的HttpSession 实例,那么您应该能够在其上使用session.removeAttribute("mySessionBean")

    请注意,这显然仅在使用与 JSF 应用程序相同的 HTTP 会话请求 Web 服务时才有效(您提出这个问题的方式 - 您似乎根本不了解 HTTP 会话是如何工作的 - 表明这不是案例)。

    【讨论】:

    • web服务的http会话不同(web服务客户端是jsf页面中的小程序)。我们使用 sessionID 来知道哪个小程序与 Facecontext 匹配,所以我们有一个 sessionID (String) 和两个 httpSession。 invalidMyBean() 方法位于applet 和jsf 会话之间的共享对象中。也许可以从 sessionID 检索 httpSession 对象?
    • 在 URL 中添加jsessionid 路径参数,让小程序保持相同的 HTTP 会话。有关相关答案,另请参阅stackoverflow.com/questions/13194034/…
    【解决方案2】:

    我回答自己在共享相同 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 的大力帮助!!

    【讨论】:

      猜你喜欢
      • 2013-08-22
      • 2011-04-14
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 2012-06-16
      • 2015-05-18
      • 1970-01-01
      • 2012-12-12
      相关资源
      最近更新 更多