如何引用 JAR 文件中提供的 JSF 托管 bean?

2023-12-19

我有一个具有以下结构的 WAR 文件:

JSF 托管 beanBusinessObjectTypeListController位于commons-web-1.0.jar in /WEB-INF/lib并在中引用BusinessObjectTypeListView.xhtml。当我运行 Web 应用程序并调用该视图时,出现以下错误:

javax.servlet.ServletException:/view/common/businessObjectTypeListView.xhtml @34,94listener =“#{businessObjectTypeListController.selectData}”:目标无法访问,标识符“businessObjectTypeListController”解析为null

为什么找不到控制器类?它应该在类路径中,是吗?


您需要符合 JSF 2.0 标准/META-INF/faces-config.xml文件在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 文件的每个类,否则成本太高。仅具有上述内容的 JAR/META-INF/faces-config.xml文件将被扫描。

您还应该确保您这样做notmetadata-complete="true"属性中的<faces-config>webapp自己的声明/WEB-INF/faces-config.xml文件,否则 JSF 将假定此面孔配置已完成,因此不会自动扫描 JAR 文件以获取注释。

如果这些条件都不满足(或不能满足),那么您需要手动将 bean 注册为<managed-bean>在 webapp 自己的/WEB-INF/faces-config.xml而不是依赖注释。

另见第 11.4.2 章JSF 2.0 规范 http://jcp.org/aboutJava/communityprocess/final/jsr314/index.html(强调我的)。

11.4.2 应用程序启动行为

...

该算法为组装基于 JSF 的 Web 组件的开发人员提供了相当大的灵活性 应用。例如,一个应用程序可能包含一个或多个自定义 UIComponent 实现,以及 关联的渲染器,因此可以在名为“/WEB-INF/faces-config.xml”的应用程序资源中声明它们 无需以编程方式将它们注册到应用程序实例。此外,应用程序可能会选择 包含一个包含“META-INF/faces-config.xml”资源的组件库(打包为 JAR 文件)。该资源的存在导致组件、渲染器和其他 JSF 实现类存储在该资源中 库 JAR 文件将自动注册,应用程序无需执行任何操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何引用 JAR 文件中提供的 JSF 托管 bean? 的相关文章

随机推荐