代码之家  ›  专栏  ›  技术社区  ›  Viplove

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

  •  4
  • Viplove  · 技术社区  · 11 年前

    我是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)
    

    网页.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导入的jar文件 jboss-5.1.0.GA\server\default\deploy\jbossweb.sar\jsf-libs ,仍然徒劳。

    请帮忙。

    3 回复  |  直到 11 年前
        1
  •  5
  •   dShringi    11 年前

    处理冲突的更好方法是在web.xml中添加上下文参数,正如我下面提到的:

    <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

        2
  •  1
  •   Arjan Tijms UML GURU    11 年前

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

    1. 添加服务器运行时

    1.1在Eclipse中打开服务器视图

    1.2上下文菜单,然后->新服务器->选择JBoss 5.0 服务器类型

    1.3服务器运行时环境->添加

    1.4主目录->例如,您的服务器主页/默认设置

    1. 现在更改您的网络项目的构建路径。

    2.1.添加库->服务器运行时->选择新的运行时

    2.3在你的耳朵里或你的网络项目Web Inf/lib中没有JSF或其他库

    现在,您已经在类路径中拥有了所有Jboss-lib,包括jsf-lib——由Eclipse控制——并且您不必担心从服务器lib设置jar等等。

    我希望它能有所帮助。以类似的方式,我只是创建了一个测试项目

        3
  •  0
  •   Himanshu Bhardwaj    11 年前

    是的,看起来像是罐子版本的碰撞

    从应用程序中删除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>
    

    应该是类似的东西。