@FacesConverter
并且@FacesValidator
不符合 EJB 或最高 JSF 2.2 的托管 bean 注入点的条件。
它们应该与 JSF 2.3 一起使用(目前仅作为里程碑提供),使用带有和的附加managed
属性,如此处所述。@FacesConverter
@FacesValidator
在 JSF 2.1 中,很少有 JSF 工件是注入目标。在 JSF 2.2 中,大量额外的人工制品使注入成为可能,但注入实际上最重要的那些,转换器和验证器,却神秘地被冷落了。
在 JSF 2.3 中,这终于得到了解决,因为以下人工制品已添加到注入目标列表中:
javax.faces.convert.Converter
javax.faces.validator.Validator
javax.faces.component.behavior.Behavior
然而,与此列表中已有的人工制品相比,这 3 个新产品并非自动注入目标。只有在相应的注解上有一个名为“managed”的新属性
@FacesConverter
并且@FacesValidator
设置@Behavior
为 true 时,它们才会如此。@Qualified
此外,通过将注释添加到它们的定义中, 所有这 3 个注释都已升级为 CDI 限定符。的现有属性
@FacesConverter
和没有被修改,这意味着它们都是@FacesValidator
绑定 的,新属性“托管”也是如此。@Behavior
但是,该属性managed
在 Mojarra 2.3.0-m02 中不可用。
是因为里程碑吗?它是否依赖于特定的 Weld/CDI 版本?我目前正在使用 GlassFish Server 4.1。这里提到了不同的工件版本(服务器版本提供的默认 Weld 版本是 2.2.2 final)。