@FacesConverter
和@FacesValidator
不适合EJB或JSF 2.2以下的托管bean注入(inject)点。
它们应该与JSF 2.3(当前仅作为milestone使用)一起使用,并带有附加的managed
和@FacesConverter
的@FacesValidator
属性,如here所述。
但是,属性managed
在Mojarra 2.3.0-m02中不可用。
是因为一个里程碑吗?是否取决于特定的Weld/CDI版本?我目前正在使用GlassFish Server 4.1。 here提到了不同的工件版本(服务器版本提供的默认Weld版本为2.2.2 final)。
最佳答案
正如您在Mojarra 2.3.0-m02的 Application#createConverter()
implementation中看到的那样,在尝试获取CDI管理的代码之前,它按照faces-config.xml
version
声明checks if it's running in JSF 2.3 mode。
换句话说,为了使这些类中的@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>
需要注意的是,IDE可能会在尚未公开的JSF 2.3 XSD文件上出错(尚未),您可以放心地忽略该部分,它不会在运行时被JSF验证。您也可以选择使用2.2 XSD并忽略不受支持的
version
上的任何IDE警告/错误。jdevelopment.nl博客作者已收到有关此问题的通知,他将确保在下次更新中也在博客中阐明以上内容。
关于jsf - JSF 2.3中的@FacesConverter和@FacesValidator中的EJB和托管bean注入(inject),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30028197/