JSF 2.3中的@FacesConverter和@FacesValidator中的EJB和托管bean注入

Tin*_*iny 5 jsf converter jsf-2.3

@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个不是自动注入目标。他们只会变得那么当一个所谓的新属性上相应的注释“管理” @FacesConverter@FacesValidator@Behavior设置为true。 此外,通过将@Qualified注释添加到其定义中,所有这三个注释均已升级为CDI限定符。

的现有属性@FacesConverter@FacesValidator@Behavior没有被修改,这意味着它们都结合,因为是新属性“管理”。

managed但是,该属性在Mojarra 2.3.0-m02中不可用。

是因为一个里程碑?是否取决于特定的Weld / CDI版本?我目前正在使用GlassFish Server 4.1。这里提到不同的工件版本(服务器版本提供的默认Weld版本为2.2.2 final)。

Bal*_*usC 5

如您在Mojarra 2.3.0-m02的Application#createConverter()实现中所看到的那样,它会在尝试获取CDI管理的代码之前,按照声明检查它是否在JSF 2.3模式下运行faces-config.xml version

换句话说,为了获得@FacesConverter(managed=true)@FacesValidator(managed=true)从而使@Inject这些类正常工作,您需要确保将您的Web应用faces-config.xml声明为符合JSF 2.3,如下所示:

<?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">

    <!-- Config here. -->

</faces-config>
Run Code Online (Sandbox Code Playgroud)

应当注意的是,IDE可能会在尚未公开发布的JSF 2.3 XSD文件上出错(尚未),您可以放心地忽略该部分,JSF在运行时不会对其进行验证。您也可以选择使用2.2 XSD并忽略不受支持的任何IDE警告/错误version


jdevelopment.nl博客作者已收到有关此问题的通知,他将确保在下次更新中也在博客中阐明以上内容。