我们目前正在使用JoinFaces 3.2.5为JSF支持从JavaEE(Wildfly)迁移一个相当大的项目到Spring Boot 2.0.5。不幸的是,启动服务器时,我们总是收到以下消息:
作用域“视图”对当前线程无效;如果您打算从单例中引用它,请考虑为此bean定义作用域代理。嵌套的异常是java.lang.IllegalStateException:找不到FacesContext。
有问题的UI Bean是一个Spring组件,另外还用javax.faces.view.ViewScoped进行了注释(例如joinfaces-maven-jar-example中的StarterMBean类)。
我们有什么特别要注意的地方,例如禁止依赖,特殊配置等?
我们非常感谢每一个提示!
答案 0 :(得分:1)
您有一个单例/应用程序作用域的bean,它直接或间接依赖于一个视图作用域的bean。这迫使BeanFactory在应用程序启动时构造视图作用域的bean,但是视图作用域的bean只能在当前正在处理JSF请求的线程中使用。
有多种方法可以解决此问题:
@ViewScoped
更改为@Scope(scopeName = "view", proxyMode = ScopedProxyMode.TARGET_CLASS)
ObjectProvider<>
,以获得作用域代理。有关此问题的更多信息,请参见:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-other-injection