2012-01-12 32 views
1

我的Java EE web應用程序在Glassfish 2.1中正常工作。現在我想遷移到GlassFish 3.1.1,但戰爭文件的成功部署後,它提供了以下錯誤:java.lang.IllegalStateException:在呈現響應後非法嘗試設置ViewHandler

WARNING: ApplicationDispatcher[/Myapp] PWC1231: Servlet.service() for servlet Faces Servlet threw exception 
java.lang.IllegalStateException: Illegal attempt to set ViewHandler after a response has been rendered. 

我的應用程序使用以下框架。

  • Spring框架3.0.2
  • JSF 2.0
  • RichFaces的3.3.3最終

它與JDK 1.6編譯。

這個問題是怎麼引起的?我該如何解決?

編輯

我遵循了RichFaces的提供here

我依賴的修改如下: -

<dependency> 
     <groupId>org.richfaces.framework</groupId> 
     <artifactId>richfaces-api</artifactId> 
     <version>3.3.3.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.richfaces.framework</groupId> 
     <artifactId>richfaces-impl-jsf2</artifactId> 
     <version>3.3.3.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.richfaces.ui</groupId> 
     <artifactId>richfaces-ui</artifactId> 
     <version>3.3.3.Final</version> 
    </dependency> 

我的JSF依賴是

 <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-api</artifactId> 
      <version>2.0.2</version> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-impl</artifactId> 
      <version>2.0.2</version> 
     </dependency> 

一在web.xml dded方面PARAM如下: -

<context-param> 
    <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name> 
    <param-value>com.sun.facelets.FaceletViewHandler</param-value> 
</context-param> 
<context-param> 
    <param-name>javax.faces.DISABLE_FACELET_JSF_VIEWHANDLER</param-name> 
    <param-value>true</param-value> 
</context-param> 

修改了應用程序描述符的2.5版本,如:

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

在臉上,配置情況如下: -

<application> 
     <navigation-handler > 
      org.navigation.CustomNavigationHandler 
     </navigation-handler> 

     <view-handler> 
      org.ajax4jsf.application.AjaxViewHandler 
     </view-handler> 
<!--  <view-handler> 
      com.sun.facelets.FaceletViewHandler 
     </view-handler>--> 
     <variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver> 
     <message-bundle>MyMessages</message-bundle> 
    </application> 

應用程序得到部署成功,但在此之後,我在瀏覽器中啓動應用程序時得到類拋出異常的錯誤:

服務器日誌如下:

INFO: myApp was successfully deployed in 21,635 milliseconds. 
SEVERE: Error Rendering View[/login.xhtml] 
javax.faces.FacesException: java.lang.ClassCastException: java.lang.String cannot be cast to javax.faces.component.UIComponent 
    at com.sun.faces.application.ApplicationImpl.createComponentApplyAnnotations(ApplicationImpl.java:1923) 

我怎樣才能解決這個?

回答

6

java.lang.IllegalStateException: Illegal attempt to set ViewHandler after a response has been rendered.

這是在JSF 2.x環境中使用JSF 1.2目標組件庫時的典型錯誤消息。 RichFaces 3.3.x專爲JSF 1.2而設計,但Glassfish 3.1隨GlassFish 2.1一起提供JSF 2.1而不是JSF 1.2。在JSF 2中,視圖處理領域有很多變化,因爲JSP已被棄用並被Facelets取代。

RichFaces有一個很好的指導如何在JSF 2環境中安裝和配置RichFaces 3.3.3:RichFaces 3.3.3 and JSF 2.0。爲了解決這個特定異常的關鍵步驟是添加其禁用JSF 2 Facelets視圖處理程序下面的上下文參數:

<context-param> 
    <param-name>javax.faces.DISABLE_FACELET_JSF_VIEWHANDLER</param-name> 
    <param-value>true</param-value> 
</context-param> 

但更多的步驟需要做也是如此。徹底閱讀指南。

+0

非常感謝您的幫助。我已按照說明進行操作,但仍然出現錯誤,請參閱編輯? – 2012-01-13 06:58:48

+0

這是一個不同的問題。如果您錯誤地使用'binding'屬性而不是組件的'value'屬性將值綁定到輔助bean,就會發生這種情況。請另外提問一個不同的例外情況。 – BalusC 2012-01-13 12:30:58

相關問題