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

时间:2015-05-04 10:46:19

标签: jsf converter jsf-2.3

@FacesConverter@FacesValidator不符合JSF 2.2的EJB或托管bean注入点。

它们应该与JSF 2.3一起使用(目前仅作为milestone提供),使用managed@FacesConverter @FacesValidator的额外javax.faces.convert.Converter属性{{3} }。

  

在JSF 2.1中,很少有JSF工件是注入目标。在JSF 2.2中   注入是在大量额外的人工制品中实现的   但是注射实际上最重要的那些,转换器   和验证者,神秘地被冷落了

     

在JSF 2.3中,现在终于如下处理了这个问题   人工制品已被添加到注射目标列表中:

     
      
  • javax.faces.validator.Validator
  •   
  • javax.faces.component.behavior.Behavior
  •   
  • @FacesConverter
  •   
     

然而,与此列表中已有的人工制品相比,这些新的3   不是自动注射目标。 他们只会变成这样   当一个名为" managed"的新属性时在相应的注释上   @FacesValidator@Behavior@Qualified设置为true。   此外,所有这3个注释都已升级为CDI   通过在其定义中添加@FacesConverter注释来确定限定符。

     

@FacesValidator@Behaviormanaged的现有属性   $this->session->unset_userdata()尚未修改,这意味着它们都是绑定,因为   是新属性"托管"。

然而,属性$this->session->userdata在Mojarra 2.3.0-m02中不可用。

是不是因为里程碑?它是否依赖于特定的Weld / CDI版本?我目前正在使用GlassFish Server 4.1。提到了不同的工件版本here(服务器版本提供的默认焊接版本最终为2.2.2)。

1 个答案:

答案 0 :(得分:5)

正如您在Mojarra 2.3.0-m02的Application#createConverter() implementation中看到的那样,checks if it's running in JSF 2.3 mode根据faces-config.xml version声明,然后尝试抓住受CDI管理的声明。

换句话说,为了让这些类中的@FacesConverter(managed=true)@FacesValidator(managed=true)@Inject能够正常工作,您需要确保声明了您的webapp 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>

注意应该是IDE可能在JSF 2.3 XSD文件上没有公开可用的错误,你可以安全地忽略该部分,它不会在运行时由JSF验证。您也可以坚持使用2.2 XSD并忽略不受支持的version上的任何IDE警告/错误。

jdevelopment.nl博客作者已收到有关此事的通知,他将确保在下一次更新中,上述内容也会在博客中得到澄清。