【问题标题】:Get scope of a @ManagedBean in JSF在 JSF 中获取 @ManagedBean 的范围
【发布时间】:2016-02-11 10:34:23
【问题描述】:

我目前正在研究一个基类被许多 bean 扩展的项目。

这个基类有一个通用方法,基本上我需要做的唯一更改是检查当特定调用失败时,调用该方法的当前实例是否是应用程序范围的 bean。如果是,我只需要记录错误消息并返回缓存响应;如果不是,我必须提出一个例外。

除了在扩展此基类的每个应用程序范围的 bean 上使用 instanceof 之外,有没有办法知道对象 this 是否是应用程序范围的 bean?

【问题讨论】:

  • 如果 bean 存储在 ServletContext 中,那么它是应用程序范围的,否则不是。
  • 您可能需要清楚地充实您的场景 - CDI 提供了强大的 bean 元数据查找机制;或者您可以像@LuiggiMendoza 推荐的那样进行上下文查找 - 取决于您的场景以及您希望它看起来有多“干净”

标签: jsf jsf-2 javabeans cdi managed-bean


【解决方案1】:

您可以检查某个实例的类是否具有特定的注释。比如调用:

Annotation[] annotations = this.getClass().getAnnotations();

将为您提供当前实例的所有注释。或者你可能想找出一些特定的注释:

ApplicationScoped annotation = this.getClass().getAnnotation(ApplicationScoped.class);

如果类没有用@ApplicationScoped注解,则返回null

在继承的情况下,方法getAnnotations() 也返回父类的注释,如果声明了父类,则使用@RequestScoped 注释的类也将返回@ApplicationScoped。另一方面,JSF 管理的 bean 将覆盖父级的范围。

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 2014-12-06
    • 2013-03-16
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 2016-03-09
    相关资源
    最近更新 更多