在Jboss 5.0上启动JSF应用程序时出错

时间:2013-04-11 05:46:11

标签: java jsf jboss5.x

我是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文件,仍然都是徒劳。

请帮忙。

3 个答案:

答案 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>

退房:Bundling JSF Inside Your WAR

答案 1 :(得分:1)

我不知道你的Eclipse是如何配置的(Java EE / JBoss工具等)。但是您应该在Web项目中添加服务器运行时:

  1. 添加服务器运行时
  2. 1.1在Eclipse中打开服务器视图

    1.2上下文菜单然后 - &gt; new Server-&gt;选择JBoss 5.0 服务器类型

    1.3服务器运行时环境 - &gt;添加

    1.4主目录 - &gt;您的服务器主页/默认例如

    1. 现在更改webproject的构建路径。
    2. 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>

应该与此类似。