【问题标题】:Error starting JSF application on Jboss 5.0在 Jboss 5.0 上启动 JSF 应用程序时出错
【发布时间】:2013-04-11 05:46: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)

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

请帮忙。

【问题讨论】:

  • 你能把 web.xml 也发一下吗?
  • 最初我在 web.xml 中没有任何侦听器,但正如 stackoverflow.com/questions/2558614/… 帖子中提供的那样,我已添加它以尝试解决问题。

标签: java jsf jboss5.x


【解决方案1】:

解决冲突的更好方法是在 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】:

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

    1. 添加服务器运行时

    1.1 在Eclipse中打开服务器视图

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

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

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

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

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

    2.3 在您的耳朵或您的 webprojects Web-Inf/lib 中没有 JSF 或其他库

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

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

    【讨论】:

    • 我不明白出了什么问题以及它是如何工作的,但它确实对我有用。你知道是什么问题吗?无论如何谢谢:)
    • 很难解释:您可以将您使用的所有 jar 放在您的 Web-Inf 文件夹中,对于您的项目来说,目前一切都很好。但请注意,您的项目必须在服务器环境下运行。该服务器(例如 JBoss)解释和部署您的应用程序。有几个类声明,jsf规范的接口和具体实现等等。在 IDE 中进行开发时,您必须考虑到这一事实。您可以通过将几个环境变量添加到您的项目中来做到这一点。这与开发独立应用程序完全不同。希望对你有帮助
    • 问题是一样的,所以当您添加 JBoss 5.0 运行时环境时,您基本上添加了 JBoss 的依赖项,并且当您根据第 2.3 点从项目中删除本地 jar 时,您删除了冲突。这就是你让它工作的方式。
    • 首先,当我添加服务器时,我已经添加了 jboss 运行时环境,现在我已经尝试了两种方法,通过在构建路径中显式添加 jar 文件并将它们添加到 WEB-INF/lib 和它没用。因此,当我添加 JBoss 5.0 运行时环境时,Himanshu 是正确的,它消除了冲突并为我工作,但是我仍然不明白为什么它没有更早地工作。无论如何,非常感谢@HimanshuBhardwaj 和 Jan Piel。
    • @JanPiel 你能告诉我在添加服务器的同时添加服务器运行时环境并在构建路径中再次添加相同的运行时环境有什么区别吗?
    【解决方案3】:

    是的,看起来像是 jar 版本冲突

    从应用程序中删除 JSF 依赖项: 如果您使用 maven 构建项目,则可以将依赖项范围设置为 provided

    从 JSF 中移除依赖范围(如果你想使用自己的 jars。) 考虑使用 Jboss 应用程序描述并排除 JSF 依赖项。

    我不知道 JBoss 5 XML 格式,所以发布 JBoss 7

    <jboss-deployment-structure>
        <deployment>
            <exclusions>
                <module name="com.sun.jsf-impl" />
            </exclusions>
        </deployment>
    </jboss-deployment-structure>
    

    应该和这个类似。

    【讨论】:

    • 我没有使用 Maven。从 web-inf 中删除 jar 文件会产生 ClassNotFoundException。感谢您的回答!
    • 对不起,我不明白这里的另一种方式是什么意思。
    • 尝试编辑应用程序的 JBoss 部署描述符,以便使用 webapp 附带的 jsf 库,而不是 Jboss 本身,我已经附上了上面的示例。抱歉,我不太了解 JBoss 5,所以发布了与 JBoss 7 相关的内容
    • 我正在使用 eclipse,但我不知道如何编辑它的 xml 配置,因为我无法打开它。而且我在 jboss 文件夹中也找不到 JBoss 部署描述符。
    • 否,此文件是项目特定的,如果需要,必须创建。并作为应用程序的一部分发货。我不知道 JBoss 5 的结构,所以不能评论太多,它应该如何为 JBoss 5 完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多