我正在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
一切都按预期工作。组件和转换器也是如此。
知道为什么没有处理注释?我没有想法......
提前致谢...
答案 0 :(得分:3)
知道了。它与此非常相似:Why doesn't JSF 2.0 RI (Mojarra) scan my class' annotations?
我的项目使用skinny war,因此战争中的lib文件夹为空/不存在。更糟糕的是,控制器豆不是在战争中,而是在一个单独的罐子里。由于这个jar不在战争中,因此jsf注释处理器不会扫描它。
我想,我将重组该项目,并可能抛出一场瘦弱的战争。那应该解决它。
答案 1 :(得分:0)
那么,您在托管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>