【问题标题】:ManagedProperty / Bean injection results in NullPointerManagedProperty / Bean 注入导致 NullPointer
【发布时间】:2013-12-15 18:07:53
【问题描述】:

在 @RequestScoped bean 中,我需要另一个 @ViewScoped bean。

所以我尝试了:

@ManagedBean
@RequestScoped
public class RequestBean
{
  @ManagedProperty( value = "#{viewBean}" )
  private ViewBean viewBean;

  public void setViewBean(...){...}

  public void doSomething(){
     // ...
  }
}

方法 doSomething() 由 buttonClick 调用并执行一些 ImageStreaming(这就是我的 Bean 被 RequestScoped 的原因)。 注入本身一开始就可以正常工作,但是一旦调用 doSomething(),我就会得到这个异常:

com.sun.faces.mgbean.ManagedBeanCreationException: Could not determine property viewBean for managed bean requestBean

(翻译后的消息,可能略有不同)

   at com.sun.faces.mgbean.ManagedBeanBuilder$BakedBeanProperty.set(ManagedBeanBuilder.java:615)
   ...
Caused by: java.lang.NullPointerException
   at com.sun.faces.mgbean.BeanManager$ScopeManager$ViewScopeHandler.getFromScope(BeanManager.java:563)
   ...

...当您忘记实现 setter 方法时,这几乎是一样的。 这里有什么问题?

【问题讨论】:

  • 试试getter方法。
  • getter 已经存在。
  • 您的 ViewBean 的名称是否名为“viewBean”?默认情况下它应该是.. 但是尝试 @ManagedBean(name = "viewBean")
  • 您是否还为您的 ViewBean 提供 setter 方法?那是强制性的
  • 我刚刚尝试明确声明 bean 的名称。 Setter 肯定存在,请参见上面的代码。没运气。再说一遍:注入工作一次 - 必须与 Streaming 有关系(请参阅here),因为只有在提到的第二个请求期间的注入由于某种原因而失败。

标签: java jsf jakarta-ee code-injection


【解决方案1】:

我建议你尝试使用 CDI,你有一个 ConversationalScope,它允许你有一个类似的 View Scoped,你可以使用简单的 @Inject 注释注入 bean

【讨论】:

  • 我编辑了我的答案,对不起,但是你可以在 RequestScoped 中注入 ViewScoped bean 是错误的,对不起我的错误。
猜你喜欢
  • 1970-01-01
  • 2021-08-04
  • 2011-07-07
  • 1970-01-01
  • 2011-07-07
  • 2012-11-14
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多