我是JSF新手,最近刚开始学习一个教程。我创建的应用程序完全按照教程中提供的信息创建。然而,当我启动服务器,我得到以下错误:
Exception sending context initialized event to listener instance of class org.jboss.web.jsf.integration.config.JBossJSFConfigureListener
java.lang.ClassCastException: com.sun.faces.config.WebConfiguration cannot be cast to com.sun.faces.config.WebConfiguration
at com.sun.faces.config.WebConfiguration.getInstance(WebConfiguration.java:154)
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:145)
web . xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Hello, World</display-name>
<description>Welcome to JavaServerFaces</description>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
</web-app>
如教程中所示,我在Web-Inf/lib中添加了jsf-api和jsf-impl,但是在谷歌中搜索相同的内容,我发现jboss有自己的jsf版本,这可能会使我的应用程序受到多个jsf版本的污染。如果是这种情况,那么我该如何解决这个问题,或者如果我错了,那么错误背后的原因是什么?
只是为了补充,因为我相信这是jar文件冲突,我试图添加jboss从jboss-5.1.0.GAserverdefaultdeployjbossweb.sarjsf-libs
导入的jar文件,仍然是徒劳的。
请帮。
处理冲突的更好方法是在web.xml中添加上下文参数,如下所述:
<context-param>
<param-name>org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL</param-name>
<param-value>true</param-value>
</context-param>
查看:bundle JSF Inside Your WAR
我不知道您的Eclipse是如何配置的(Java EE/JBoss工具等)。但是你应该在你的webproject中添加一个服务器运行时:
- 添加服务器运行时
在Eclipse中打开Server视图
1.2上下文菜单,然后->新建服务器->选择JBoss 5.0 服务器类型
1.3服务器运行时环境-> add
1.4主目录->你的服务器的Home/default例如
- 现在改变你的webproject的构建路径
2.1。添加库->服务器运行时->选择新的运行时
没有JSF或其他库在你的耳朵或在你的web项目Web-Inf/lib现在您已经拥有了所有的jboss -lib,包括在您的类路径中的jsf-lib——由Eclipse控制——并且您不必担心从服务器库设置jar等等。
我希望它有帮助。以类似的方式,我创建了一个测试项目
看起来像一个jar版本冲突
从应用程序中删除JSF依赖项:如果您正在使用maven构建项目,您可以将依赖范围设置为提供的。
从JSF中移除依赖范围(如果您想使用您自己的jar)。考虑使用Jboss应用程序描述,并排除JSF依赖项。
我不知道JBoss 5的XML格式,所以发布JBoss 7
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="com.sun.jsf-impl" />
</exclusions>
</deployment>
</jboss-deployment-structure>
应该是类似的