我正在JBoss AS 6上运行一个JSF 2应用程序。
不知怎的,容器没有处理注解,比如@FacesComponent或@FacesValidator等。如果我用@FacesValidator("fooValidator")
注释Bean,并尝试将某个组件上的validatorId
设置为"fooValidator"
,我得到:
Caused by: javax.faces.FacesException: Expression Error: Named Object: fooValidator not found.
at com.sun.faces.application.ApplicationImpl.createValidator(ApplicationImpl.java:1530) [:2.0.3-]
...
但是,如果我添加
<validator>
<validator-id>fooValidator</validator-id>
<validator-class>foo.MyClass</validator-class>
</validator>
对我的faces-config.xml
来说,一切都如预期。组件和转换器也是如此。
知道为什么不处理注释吗?我没主意了。。。
提前感谢。。。
明白了。它和这个非常相似:为什么不';t JSF 2.0 RI(Mojarra)扫描我的类';注释?
我的项目使用了一个瘦war,所以war中的lib文件夹是空的/不存在的。更糟糕的是,控制器豆不在战争中,而是在一个单独的罐子里。由于这个jar不在战争中,jsf注释处理器不会扫描它
我想,我会重组这个项目,很可能会放弃这场骨瘦如柴的战争。这应该可以解决问题。
那么,您在托管bean上使用的是@Named
而不是@ManagedBean
?:)
如果faces-config.xml
没有声明为符合JSF 2.0规范,就会发生这种情况。请确保根声明如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<!-- config here -->
</faces-config>