【问题标题】:How to access @ViewScoped managed beans from Servlets?如何从 Servlet 访问 @ViewScoped 托管 bean?
【发布时间】:2012-11-08 07:45:04
【问题描述】:

我想访问 Servlet 内的视图范围托管 bean。

我搜索了类似的问题并得到了这些:

how to get beans from view scope 使用 FacesContext.getCurrentInstance(),不适用于 Servlet,因为它应该给出空结果

JSF - get managed bean by name 处理所有其他范围,但不处理视图范围

我认为这是不可能的,是吗?

有一个简单的解决方案可以将该 bean 范围更改为会话范围,但这是最后一次机会,因为我担心内存消耗。

我的最终需求如下:managebean 包含一些显示在 dataTable 中的数据。同一页面应包含这些数据的图表表示形式的图像(强制性)。图像可以由 Servlet 生成,但它需要访问数据或从数据库重新加载它们。

我还尝试了 PrimeFaces 2.X 中的 <p:graphicImage>,但它与 viewscope bean 不兼容。有什么建议吗?

【问题讨论】:

    标签: jsf servlets view-scope


    【解决方案1】:

    这是不可能的,不。视图范围与特定的 JSF 视图相关联,这在普通的 HTTP servlet 请求中是无法实现的。请注意,您也无法在纯 HTTP servlet 请求期间访问具体的请求范围 bean,它们将始终返回 null

    会话范围是你能得到的最好的。在 servlet 中完成该属性后,您可以从会话范围中删除该属性。

    session.removeAttribute("somename");
    

    【讨论】:

    • 无论我在哪里遇到与 JSF 相关的问题,我都知道我可以信赖您。谢谢
    • >BalusC 说:“请注意,在普通的 HTTP servlet 请求期间,您也无法访问具体的请求范围 bean...” 您能解释一下原因吗?谢谢。
    • @JMS:很简单,它与用于 JSF 页面的 HTTP 请求不同......
    猜你喜欢
    • 2012-08-27
    • 2011-04-24
    • 2016-12-26
    • 2012-12-22
    • 2014-02-24
    • 2013-02-01
    • 2014-03-09
    • 2013-03-31
    • 2013-07-26
    相关资源
    最近更新 更多