2012-01-25 49 views
0

我試圖獲得在Websphere服務器上運行的世界上最簡單的JSF應用程序。該應用程序由兩個xhtml文件和web.xml文件組成。該應用程序編譯,構建和安裝沒有任何問題。當我嘗試在我的瀏覽器頁面,我得到:錯誤500:WAS 7中的java.lang.StackOverflowError

錯誤500:java.lang.StackOverflowError的

閒來無事顯示在頁面上,也不在日誌中。我一直在Google上搜索幾個小時,但找不到解決方案。

這裏是我的web.xml文件:

<context-param> 
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
    <param-value>.xhtml</param-value> 
</context-param> 

<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>*.jsf</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
</servlet-mapping> 

這裏是JSF頁面:

<f:view> 
<h:form> 
    <h:panelGrid columns="1"> 
     <h:outputLabel value="Carrier" /> 

     <h:outputLabel value="Item Number: " /> 

     <h:outputLabel value="Postal Code: " /> 

     <h:outputLabel value="Quantity: " /> 

    </h:panelGrid> 

</h:form> 
</f:view> 

這是這樣一個簡單的程序,我想不通爲什麼它不會運行。任何幫助是極大的讚賞。

哦,讓我添加應用程序在Glassfish和Webspere CE上完美運行,而不是在Websphere Express v7上。當然,我需要它運行在Websphere Express v7上。

回答

2

顯然, 實際視圖文件不具有 .jspx延長,但延長 .xhtml。因此, FacesServlet將在每次調用自己的無限循環中運行,最終導致內存堆棧溢出。

要解決這個問題,就需要從刪除web.xml條目:

<context-param> 
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
    <param-value>.jspx</param-value> 
</context-param> 

默認爲.xhtml了。

我也建議刪除此映射:

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
</servlet-mapping> 

棒在URL中使用 .xhtml擴展,像這樣 http://localhost:8080/context/page.xhtml


更新:我的錯誤。 WAS 7確實支持JSF 2.0,而不是而不是。它僅支持JSF 1.2。另請參閱WAS documentation。您需要JSP文件而不是Facelets(XHTML)文件。你也不能利用JSF 2.0的優勢。

要讓JSF 2.0在WAS 7中工作,您需要自己將其捆綁到webapp的/WEB-INF/lib中,並配置WAS類加載器策略。另請參見this link

即使Websphere 7不正式支持JSF 2.0,也可以使其在降級模式下工作。請按照下面的步驟使它適用於您的Websphere 7版本。

  • 升級到至少7.0.0版本。13
  • 船舶在你的WEB-INF/lib目錄
  • 設置WAR類加載器的鑽嘴魚科的JAR文件爲PARENT_LAST
  • 將EAR類加載器PARENT_LAST和應用

注降級模式意味着你無法使用@Resource或任何JPA註釋。如果您認爲您需要支持,請聯繫您的IBM代表。

注意它會處理@PostConstruct和@PreDestroy。

+0

感謝BalusC下。我有.xhtml作爲參數值,並得到相同的錯誤。在閱讀另一個網站上的評論後,我將其改爲.jspx。無論我似乎放在context-param/param-value中的值是什麼,我仍然會遇到stackoverflow錯誤。 – user1054606

+0

你的實際文件有什麼擴展名? (它應該是'.xhtml')你在'/ WEB-INF/lib'中有哪些JAR? (對於WAS,你實際上應該沒有人)你的'faces-config.xml'根聲明是怎麼樣的? (對於JSF 2.0,您需要兼容JSF 2.0) – BalusC

+0

沒有jar文件,也沒有faces-config.xml。我只是試圖讓頁面顯示一些基本的jsf標籤。我所有的頁面/文件都有.xhtml擴展名。沒有處理或邏輯只是一個簡單的頁面與一些標籤。問題是什麼?我試過了所有的東西,只要我能告訴我所有的代碼都是正確的。 – user1054606

1

如果由於某種原因,你需要使用JSF 1.2,而不是2.0

你可以嘗試添加Facelets庫項目。

,並添加以下到faces-config.xml中

<faces-config> 
    . 
    . 
    <application> 
     <view-handler>com.sun.facelets.FaceletViewHandler</view-handler> 
    </application> 
    . 
    . 
</faces-config> 

現在你可以使用.xhtml,而不是.JSP JSF 1.2