【问题标题】:How to initialise a Managed Bean in request scope from a servlet如何从 servlet 初始化请求范围内的托管 Bean
【发布时间】:2013-06-16 18:59:33
【问题描述】:

我有一个 servlet,它将在某些条件下使用 ExternalContext.redirect 导航到 JSF 页面。 我需要在这个 Servlet 中初始化一个 Managed Bean 并将其设置在请求范围内,以便我的 JSF 页面可以直接访问 Managed Bean 的属性并在页面加载时显示它们。

我看过使用 getServletContext() 设置 bean 的帖子

喜欢,

getServletContext().setAttribute("beanName",new Bean())

它有效。但是这种方法会将 bean 设置在应用程序范围而不是请求范围内。

我还尝试了以下方法:

request.setAttribute("beanName",new Bean()) 

没用

所以请告诉我是否有任何方法可以在请求范围内设置/初始化托管 bean

【问题讨论】:

  • 这是一个奇怪的要求。为什么不简单地使用带有 @RequestScope 的 bean 并从您的页面访问它?
  • 创建一个带有@ViewScoped注解的托管bean。 bean 将在用户访问视图后创建(这将在重定向中),并将一直存在到用户离开视图(更改为另一个视图,关闭选项卡或关闭浏览器)。
  • 你是在 servlet 还是 backing bean 中?
  • 我的要求是我从像 servlet 这样的非 JSF 资源导航到 JSF 页面。这样做我需要让我的托管 bean 在请求范围内预加载一些值,以便我的页面渲染可以拉取这些值并显示。 @LaurentG我正在使用JSF 1.2 - 没有注释。我的要求并不关心它在JSF中的配置方式,因为我正在从Servlet(非JSF资源)导航到JSF页面(我正在使用XHTML:仅供参考)
  • 为什么不在支持bean的构造函数中做servlet的工作,然后直接链接到JSF页面?

标签: jsf servlets managed-bean


【解决方案1】:

如果是请求范围的 bean,请使用 HttpServletRequest#setAttribute()

BeanName beanName = new BeanName();

request.setAttribute("beanName", beanName);

如果它是一个会话范围的 bean,

request.getSession().setAttribute("beanName", beanName);

【讨论】:

  • 感谢您的回复!但我已经尝试过了。Dint 工作。我希望 bean 在请求范围内
  • @SaiPrasadSabeson 您是否在faces-config.xml 中为bean 输入了条目?
  • 是的,我已经做到了....由于我们在 Servlet 中没有 JSF 生命周期,我想使用 faces-config 进行讨论是开箱即用的
  • Vikas,OP 正在发送从 servlet 到 JSF 页面的重定向。您应该知道重定向会创建 new HTTP 请求。
  • @BalusC 太棒了!同意..所以这就是我的请求范围不起作用的原因......这个新的请求有没有其他方法可以保存我的 bean?
猜你喜欢
  • 1970-01-01
  • 2012-02-24
  • 2012-12-02
  • 2011-01-21
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
  • 2012-06-15
  • 2011-09-24
相关资源
最近更新 更多