@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/

10-14 05:16