2013-04-11 53 views
4

我是JSF的新手,我最近開始使用教程。我完全按照教程中提供的信息創建了應用程序。然而,當我啓動服務器,我收到以下錯誤:在Jboss 5.0上啓動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> 

如教程表明我已經添加了JSF的API和JSF的IMPL在WEB-INF/lib,但是同樣的谷歌搜索,我發現jboss有它自己的jsf版本,這可能是污染我的應用程序與多個jsf版本。如果是這樣的話,我該如何解決這個問題,或者如果我錯了,那麼錯誤背後的原因是什麼?

只是添加,因爲我相信它的jar文件conflit我試圖添加與jboss從jboss-5.1.0.GA\server\default\deploy\jbossweb.sar\jsf-libs導入的jar文件,仍然是徒勞。

請幫忙。

+0

你可以發佈web.xml嗎? – Thihara 2013-04-11 05:50:08

+0

最初,我沒有在web.xml中的任何監聽器,但在提供的後http://stackoverflow.com/questions/2558614/jsf-web-application-with-icefaces-compaonent我已經添加它試圖解決問題。 – Viplove 2013-04-11 05:54:33

回答

5

一種更好的方式與衝突,以應付起來是在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

0

是的看起來像一個罐子版本碰撞

從應用程序中刪除JSF的依賴關係: 如果您正在使用Maven構建項目,你可以設置的依賴關係範圍提供

從JSF中刪除依賴關係範圍(如果您想使用自己的罐子)。 考慮使用Jboss應用程序描述並排除JSF依賴關係。

我不知道的JBoss 5 XML格式的,所以發佈JBoss的7

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

應該與此類似。

+0

我沒有使用maven。從web-inf中移除jar文件會給出一個ClassNotFoundException。謝謝你的回答! – Viplove 2013-04-11 06:11:23

+0

嘗試其他方式然後 – 2013-04-11 06:13:19

+0

對不起,我沒有得到什麼是另一種方式在這裏。 – Viplove 2013-04-11 06:15:12

1

我不知道你的Eclipse是如何配置的(Java EE/JBoss工具等)。在Eclipse

  1. 添加服務器運行時

1.1打開服務器視圖

1.2上下文菜單,然後 - >新服務器 - >選擇JBoss的5.0:但你要添加一臺服務器運行時你webproject 服務器類型

1.3 Server運行時enviroment->添加

1。 4主目錄 - >您的服務器主頁/默認例如

  1. 現在更改您的webproject的構建路徑。

2.1。添加庫 - >服務器runtime->選擇您的新的運行

2.3沒有JSF或在你的耳朵或在您webprojects WEB-INF /其他庫LIB

現在你把所有的JBoss的庫包括jsf-在你的類路徑中的庫 - 由Eclipse控制 - 你不必擔心從服務器庫設置jar等等。

我希望它有幫助。以類似的方式我只是創建一個測試項目

+0

我不明白什麼是錯的,它是如何工作的,但它確實爲我工作。你有什麼想法是什麼問題? 謝謝:) – Viplove 2013-04-11 08:24:23

+0

難以解釋:您可以將所有使用的罐子放在Web-Inf文件夾中,對於您的項目,一切都很好。但請注意,您的項目必須在服務器環境下運行。這個服務器 - 例如JBoss - 解釋和部署你的應用程序。有幾個類聲明,jsf規範的接口和具體的實現等等。在開發IDE時,您必須對待這個事實。您可以通過將幾個環境變量添加到您的項目中來做到這一點。這與開發獨立應用程序完全不同。希望它有幫助 – 2013-04-11 08:45:38

+0

問題是一樣的,所以當你添加JBoss 5.0運行時環境時,你基本上添加了JBoss的依賴關係,並且當你從項目中刪除了本地jar文件時,你刪除了衝突。這就是你如何運作的。 – 2013-04-11 08:46:29