【发布时间】: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