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)。
如您在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博客作者已收到有关此问题的通知,他将确保在下次更新中也在博客中阐明以上内容。
归档时间: |
|
查看次数: |
881 次 |
最近记录: |