@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
,@Behavior
和managed
的现有属性$this->session->unset_userdata()
尚未修改,这意味着它们都是绑定,因为 是新属性"托管"。
然而,属性$this->session->userdata
在Mojarra 2.3.0-m02中不可用。
是不是因为里程碑?它是否依赖于特定的Weld / CDI版本?我目前正在使用GlassFish Server 4.1。提到了不同的工件版本here(服务器版本提供的默认焊接版本最终为2.2.2)。
答案 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博客作者已收到有关此事的通知,他将确保在下一次更新中,上述内容也会在博客中得到澄清。