【问题标题】:Share a scope between Jersey Servlet and JSF Backing Bean在 Jersey Servlet 和 JSF Backing Bean 之间共享一个范围
【发布时间】:2012-06-14 08:52:56
【问题描述】:

我只想问有没有人做过这样的事情。基本上,它就像 paypal express checkout 功能:

1.) 您在商家商店中选择要结帐的商品。

2.) 您将被重定向到登录页面,在我的例子中,我将其实现为 Jersey Rest Servlet。在发布时,将数据存储在会话 EJB 支持 bean 中并调用 Response.seeOther() 以重定向到登录页面 (JSF)。

3.) 如果登录成功,则应保留已发布的交易数据。

但看起来,虽然我可以调用会话支持 bean,但将发布的数据存储在该 bean 内的变量中。当我点击 login (login ok) 并重新访问同一个 bean 时,我存储发布数据的变量变为 null。

那么,Jersey Rest Servlet 和 ejb 中的会话范围支持 bean 之间是否不共享会话范围?

还有什么好的方法吗?

谢谢,
切苏亚

【问题讨论】:

    标签: jsf jersey java-ee-6 cdi


    【解决方案1】:

    会话范围不适用于 Web 服务调用。您需要使用 Application 范围,或创建自己的范围。

    【讨论】:

    • 我明白了,现在已经澄清了。不幸的是,Application Scope 似乎不是一个好主意,因为我可以同时进行多个结帐事务,并且我不想将发布的数据存储在 1 个应用程序范围变量中。
    • 这就是地图的设计目的(当然这也是应用程序服务器在内部处理并行会话的方式...... :-) 另一种选择是将数据存储在数据库中,但是您可能必须摆弄取消的登录。
    • 不幸的是,虽然数据库是最简单的方法,但它可能不是最佳选择,因为垃圾数据只会堆积在数据库中。我不太确定地图,因为我以前没有实现过这种类型的功能。所以这就像我将有一个将绑定到用户(1 到 1)的订单地图?
    【解决方案2】:

    在尝试解决这个问题后,我得出一个结论,即不可能将 jsf 会话共享到 jersey 或 servlet 会话,因为它们以不同的方式实现。

    我对我的问题的解决方案(不回答问题)是使用 HttpServlet,并将事务存储为会话属性:

    HttpSession session = request.getSession(true);
    session.setAttribute("POSTED_ITEMS", postedItems);
    

    这样我就可以访问下一页了。

    *我希望有一种方法可以发布到由 javaee6 bean 支持的 jsf 页面,这将使生活变得简单:-)。

    【讨论】:

      猜你喜欢
      • 2012-04-19
      • 2011-08-16
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多