0

我在 JBoss AS 6.1 上部署我的 Web 应用程序时遇到了一些困难。我当前的项目分为主 Web 应用程序(使用 JSF 2 facelets 的控制器/托管 bean 和 Web 前端)和一个带有复合组件 + 支持 bean 的 jar。但是当我尝试访问该页面时,我收到一个错误,即无法实例化指定的组件类型。

将支持 bean 复制到主 Web 应用程序可以解决问题,但这不是我想要的。那么有什么需要注意的吗?

支持豆看起来像

@FacesComponent(value = "elementBase")
public class ElementBase extends UINamingContainer {
    ...
}

和复合组件接口

<composite:interface componentType="elementBase">
... some attributes
</composite:interface>

jar的结构如下

-- META-INF
    |-- resources
    |    |-- components
    |         |-- elementBase.xhtml
-- com
    |-- example
    |    |-- ElementBase.class

我也尝试faces-config.xmlMETA-INF文件夹中添加组件类型,但仍然找不到组件类型。

4

1 回答 1

4

通过 BalusC 对JEE6> Packaging JSF facelets (xhtml) and ManagedBeans as JAR问题的回答

至于托管 bean 和其他 JSF 类,如验证器、转换器等,只需使用@ManagedBean@FacesValidator@FacesConverter等注释它们,并以通常的方式将它们打包到 JAR 中。您只需/META-INF/faces-config.xml在 JAR 中提供一个 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">
</faces-config>

这样,JSF 将被触发以扫描 JAR 中的类以查找 JSF 特定的注释。或者,您也可以以 JSF 1.x 的方式在 JAR 的 faces-config.xml 中注册它们。

Java EE6 教程:应用程序配置资源文件

一个应用程序可以有多个应用程序配置资源文件。JavaServer Faces 实现通过查找以下内容来查找配置文件:

  • /META-INF/faces-config.xml在 Web 应用程序/WEB-INF/lib/目录和父类加载器中的任何 JAR 文件中命名的资源。如果存在具有此名称的资源,则将其作为配置资源加载。这种方法对于包含一些组件和渲染器的打包库是实用的。此外,任何名称以 faces-config.xml 结尾的文件也被视为配置资源并按此方式加载。

  • Web 部署描述符文件中的上下文初始化参数 ,javax.faces.application.CONFIG_FILES它为您的 Web 应用程序指定多个配置文件的一个或多个(逗号分隔)路径。此方法最常用于企业级应用程序,这些应用程序将维护大型应用程序每个部分的文件的责任委托给不同的组。

  • /WEB-INF/应用程序目录中名为 faces-config.xml 的资源。简单的 Web 应用程序以这种方式使其配置文件可用。

..我可以解决我的问题。

一步一步解决

  1. 创建支持 bean

    @FacesComponent(value = "elementBase")
    public class ElementBase extends UINamingContainer {
        ...
    }
    
  2. 和具有以下接口的复合组件

    <composite:interface componentType="elementBase">
        ... some attributes, value holder, ..
    </composite:interface>
    
  3. 在已部署的 jar 中提供一个faces-config.xml,以指示该 jar 包含带注释的类。已部署 jar 的结构应如下所示

    -- META-INF
        |-- resources
        |    |-- components
        |         |-- elementBase.xhtml
        |-- faces-config.xml
    -- com
        |-- example
        |    |-- ElementBase.class
    
  4. /WEB-INF/lib在 Web 应用程序的文件夹中部署 jar 。

研究/相关链接和主题

于 2012-09-21T15:36:51.477 回答