我在JBoss AS 6.1上部署我的Web应用程序时遇到了一些困难。我当前的Project分为主Web应用程序(控制器/托管bean和使用JSF 2 facelets的web前端)和一个带有复合组件+后备bean的jar。但是当我尝试访问该页面时,我收到一条错误,指出无法实例化指定的组件类型。
将辅助bean复制到主Web应用程序可以解决问题,但这不是我想要的。那么有什么需要注意的吗?
支持bean看起来像
@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.xml
文件夹中添加META-INF
,但仍未找到组件类型。
答案 0 :(得分:4)
通过BalusC对问题JEE6> Packaging JSF facelets (xhtml) and ManagedBeans as JAR
的回答对于托管bean和其他JSF类(如验证器,转换器等),只需使用
@ManagedBean
,@FacesValidator
,@FacesConverter
等对它们进行注释,然后将它们打包到JAR中办法。您只需要在JAR中提供兼容JSF 2.0的/META-INF/faces-config.xml
文件。
<?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特定的注释。或者,您也可以在JAR的faces-config.xml中以JSF 1.x方式注册它们。
和Java EE6 Tutorial: Application Configuration Resource File
您可以为应用程序提供多个应用程序配置资源文件。 JavaServer Faces实现通过查找以下内容来查找配置文件:
Web应用程序的
/META-INF/faces-config.xml
目录和父类加载器中的任何JAR文件中名为/WEB-INF/lib/
的资源。如果存在具有此名称的资源,则将其作为配置资源加载。此方法适用于包含某些组件和渲染器的打包库。此外,任何名称以faces-config.xml结尾的文件也被视为配置资源,并按此加载。Web部署描述符文件中的上下文初始化参数
javax.faces.application.CONFIG_FILES
,它指定Web应用程序的多个配置文件的一个或多个(逗号分隔)路径。此方法最常用于企业级应用程序,该应用程序委派独立组负责维护大型应用程序的每个部分的文件。应用程序的
/WEB-INF/
目录中名为faces-config.xml的资源。简单的Web应用程序以这种方式使其配置文件可用。
..我可以解决我的问题。
创建支持bean
@FacesComponent(value = "elementBase")
public class ElementBase extends UINamingContainer {
...
}
以及具有以下界面的复合组件
<composite:interface componentType="elementBase">
... some attributes, value holder, ..
</composite:interface>
在已部署的jar中提供faces-config.xml
,以指示jar包含带注释的类。部署的jar的结构应该看起来像
-- META-INF
|-- resources
| |-- components
| |-- elementBase.xhtml
|-- faces-config.xml
-- com
|-- example
| |-- ElementBase.class
将jar部署在Web应用程序的/WEB-INF/lib
文件夹中。