您需要在文件/META-INF/faces-config.xml
中有一个符合 JSF 2.0 的commons-web-1.0.jar
文件,以便让 JSF 扫描 JAR 文件以查找带有 JSF 注释的类,例如@ManagedBean
并自动注册它们。
<?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">
</faces-config>
JSF 不会扫描类路径中每个 JAR 文件的每个类,这太昂贵了。/META-INF/faces-config.xml
仅扫描具有上述文件的 JAR 。
您还应该确保在webapp 自己的文件的声明中没有该metadata-complete="true"
属性,否则 JSF 将假定此 faces 配置是完整的,因此不会自动扫描 JAR 文件中的注释。<faces-config>
/WEB-INF/faces-config.xml
如果这些条件都不满足(或不能满足),那么您需要手动将 bean 注册为<managed-bean>
webapp 自己的/WEB-INF/faces-config.xml
,而不是依赖注释。
另请参阅JSF 2.0 规范的第 11.4.2 章(强调我的)。
11.4.2 应用程序启动行为
...
该算法为组装基于 JSF 的 Web 应用程序组件的开发人员提供了相当大的灵活性。例如,应用程序可能包含一个或多个自定义 UIComponent 实现以及相关的渲染器,因此它可以在名为“/WEB-INF/faces-config.xml”的应用程序资源中声明它们,而无需以编程方式将它们注册到应用程序实例。此外,应用程序可能会选择包含一个包含“META-INF/faces-config.xml”资源的组件库(打包为 JAR 文件)。
此资源的存在导致存储在此库 JAR 文件中的组件、渲染器和其他 JSF 实现类被自动注册,应用程序不需要任何操作。