在 JoinFaces ViewScope 中找不到 FacesContext
No FacesContext found in JoinFaces ViewScope
我们目前正在使用 JoinFaces 3.2.5 将一个相当大的项目从 JavaEE (Wildfly) 迁移到 Spring Boot 2.0.5 以获得 JSF 支持。不幸的是,当启动服务器时,我们总是收到以下消息:
Scope 'view' 对当前线程无效;如果您打算从单例中引用它,请考虑为该 bean 定义一个作用域代理;嵌套异常是 java.lang.IllegalStateException:找不到 FacesContext。
有问题的 UI bean 是一个 Spring 组件,另外用 javax.faces.view.ViewScoped 注释(如 joinfaces-maven-jar-example 中的 class StarterMBean)。
有什么特别需要我们注意的吗,例如禁止依赖项、特殊配置等?
我们感谢每一个提示!
您有一个 singleton/application 作用域 bean,它直接或间接依赖视图作用域 bean。这会强制 BeanFactory 在应用程序启动时构造视图范围的 bean,但是视图范围的 bean 只能在当前正在处理 JSF 请求的线程中使用。
有多种方法可以解决这个问题:
- 尝试将您的 bean 建模为仅依赖于具有相同或更高范围的 bean。 (因此应用程序范围的 beans 只能使用应用程序范围的 beans,视图范围的 beans 可以使用视图、会话或应用程序范围的 beans 等等)
- 当您 100% 确定您的应用程序作用域 bean 在处理 JSF 请求期间将仅使用视图作用域 bean 时,您可以自动或手动将 bean 包装在作用域代理中。
- 要自动获取作用域代理,请将
@ViewScoped
更改为 @Scope(scopeName = "view", proxyMode = ScopedProxyMode.TARGET_CLASS)
- 如果您无权访问视图作用域 bean,可以将注入点声明为
ObjectProvider<>
以获得作用域代理。
可在此处找到有关此问题的更多信息:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-other-injection
我们目前正在使用 JoinFaces 3.2.5 将一个相当大的项目从 JavaEE (Wildfly) 迁移到 Spring Boot 2.0.5 以获得 JSF 支持。不幸的是,当启动服务器时,我们总是收到以下消息:
Scope 'view' 对当前线程无效;如果您打算从单例中引用它,请考虑为该 bean 定义一个作用域代理;嵌套异常是 java.lang.IllegalStateException:找不到 FacesContext。
有问题的 UI bean 是一个 Spring 组件,另外用 javax.faces.view.ViewScoped 注释(如 joinfaces-maven-jar-example 中的 class StarterMBean)。
有什么特别需要我们注意的吗,例如禁止依赖项、特殊配置等?
我们感谢每一个提示!
您有一个 singleton/application 作用域 bean,它直接或间接依赖视图作用域 bean。这会强制 BeanFactory 在应用程序启动时构造视图范围的 bean,但是视图范围的 bean 只能在当前正在处理 JSF 请求的线程中使用。
有多种方法可以解决这个问题:
- 尝试将您的 bean 建模为仅依赖于具有相同或更高范围的 bean。 (因此应用程序范围的 beans 只能使用应用程序范围的 beans,视图范围的 beans 可以使用视图、会话或应用程序范围的 beans 等等)
- 当您 100% 确定您的应用程序作用域 bean 在处理 JSF 请求期间将仅使用视图作用域 bean 时,您可以自动或手动将 bean 包装在作用域代理中。
- 要自动获取作用域代理,请将
@ViewScoped
更改为@Scope(scopeName = "view", proxyMode = ScopedProxyMode.TARGET_CLASS)
- 如果您无权访问视图作用域 bean,可以将注入点声明为
ObjectProvider<>
以获得作用域代理。
- 要自动获取作用域代理,请将
可在此处找到有关此问题的更多信息:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-other-injection