jboss - 无法在 CDI @RequestScoped 托管 Bean 中注入 ExternalContext 或 RequestParam
问题描述
在网上搜索我发现应该可以将一些方便的 JSF 对象@Inject 到 CDI bean 中,这些对象应该由 JSF 生成并通过 javax.faces.annotation.* 中的限定符公开(如 @RequestMap 或 @SessionMap)。
但是,我无法将这些资源@Inject 注入 CDI Bean。即使注入ExternalContext
或FacesContext
失败,如 JSF 2.3-spec 中所述,@Inject 以及以下内容应该是可能的:
- javax.faces.application.ResourceHandler
javax.faces.context.Flash
javax.servlet.http.HttpSession <--这个正在工作
@RequestScoped
public class SimpleRequestParamReportProvider implements ReportParamsProvider {
@Inject // <-- FAILS
ExternalContext externalContext;
@Inject // <-- FAILS
FacesContext facesContext;
@Inject @RequestMap // <-- FAILS
Map<String, Object> requestMap;
@Inject // <-- WORKS
HttpSession httpSession;
应用程序启动时显示的错误:
在注入点 [BackedAnnotatedField] @Inject report.SimpleRequestParamReportProvider.facesContext 具有限定符 @Default 的类型 FacesContext 的依赖关系不满足
我正在使用符合 JSF 2.3 的JBoss EAP 7.2 https://access.redhat.com/articles/113373
有没有其他人遇到过同样的问题?有什么我想念的吗?
编辑 这是我正在使用的 WEB-INF/faces-config-xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_3.xsd"
version="2.3">
</faces-config>
编辑 2:一旦我添加了 @FacesConfig 注释的 java 类,JSF 对象的注入就可以工作:
@FacesConfig(version = FacesConfig.Version.JSF_2_3)
public class FacesActivator {}
解决方案
推荐阅读
- wordpress - WP_REST_Request 为自定义端点返回 rest_no_route (404)
- jmeter - 可扩展性测试和其他性能测试有什么区别?
- vb.net - 如何查看循环中值的变化?
- python - 如何在命令中取消脚本 discord.py
- php - 如何使当前年份在页脚模板中可用
- sql - 带有多个选择语句的oracle中的LISTAGG
- c# - 如何在现有内容(例如 pdf 中的图像/形状)上添加水印?
- google-maps-markers - Android中是否有任何选项可以在运行时过滤元素(如地图上的不同类型标记)以提供可访问性的对讲
- looker - 如何在查看器中创建从不同用户到另一个用户文件夹的文件夹结构
- javascript - 我在使用来自状态的信息填充选择输入时遇到问题