我是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文件conflit我试图添加从jboss-5.1.0.GA\server\default\deploy\jbossweb.sar\jsf-libs
jboss导入的jar文件,仍然都是徒劳。
请帮忙。
答案 0 :(得分:5)
应对冲突的更好方法是在web.xml中添加一个context参数,如下所述:
<context-param>
<param-name>org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL</param-name>
<param-value>true</param-value>
</context-param>
答案 1 :(得分:1)
我不知道你的Eclipse是如何配置的(Java EE / JBoss工具等)。但是您应该在Web项目中添加服务器运行时:
1.1在Eclipse中打开服务器视图
1.2上下文菜单然后 - &gt; new Server-&gt;选择JBoss 5.0 服务器类型
1.3服务器运行时环境 - &gt;添加
1.4主目录 - &gt;您的服务器主页/默认例如
2.1。添加库 - >服务器运行时 - &gt;选择新的运行时
2.3您的耳朵或Webprojects Web-Inf / lib中没有JSF或其他lib
现在你有了所有的Jboss-libs,包括你的类路径中的jsf-libs - 由Eclipse控制 - 你不必担心从服务器lib设置jar等等。
我希望它有所帮助。以类似的方式,我只是创建一个测试项目
答案 2 :(得分:0)
是的,看起来像是一个罐子版本碰撞
从Application中删除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>
应该与此类似。