0

我在 JBoss AS 6 上运行 JSF 2 应用程序。

不知何故,注解,如@FacesComponent 或@FacesValidator 等,不被容器处理。如果我用注释一个 Bean@FacesValidator("fooValidator")并尝试将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来说,一切都按预期工作。组件和转换器也是如此。

知道为什么不处理注释吗?我没主意了...

提前致谢...

4

2 回答 2

3

知道了。它与这个非常相似:为什么 JSF 2.0 RI (Mojarra) 不扫描我的班级的注释?

我的项目使用了一个瘦的 war,所以 war 中的 lib 文件夹是空的/不存在的。更糟糕的是,Controller Bean 不在战争中,而是在一个单独的 jar 中。由于这个jar不在war中,jsf注解处理器不会扫描它。

我想,我会重组这个项目,并可能会放弃这场瘦身战争。那应该解决它。

于 2011-06-17T08:32:17.797 回答
0

那么,您是在使用@Named而不是@ManagedBean在您的托管 bean 上使用吗?:)

如果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>
于 2011-06-16T10:53:33.773 回答