2012-01-12 3 views
1

Java EE 웹 응용 프로그램이 Glassfish 2.1과 잘 작동합니다. 지금은 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. 

내 응용 프로그램 프레임 워크 다음 사용합니다.

  • 스프링 프레임 워크 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은 : -

<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> 
- : 내에서 얼굴-설정은 다음과 같다

<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"> 

<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으로 내 응용 프로그램 설명을 수정

응용 프로그램이 성공적으로 배포되지만 이후 브라우저에서 응용 프로그램을 시작할 때 클래스 캐스트 예외 오류가 발생합니다.

서버 로그는 다음과 같다 :

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은 JSF 1.2 대신 GlassFish 2.1과 함께 JSF 2.1과 함께 제공됩니다. JSF 2에서는 JSP가 사용되지 않고 Facelets로 대체 되었기 때문에 뷰 처리 영역에서 상당히 많은 변경 사항이 있습니다.

RichFaces는 JSF 2 환경에서 RichFaces 3.3.3을 설치하고 구성하는 방법에 대한 훌륭한 지침서를 가지고 있습니다 : RichFaces 3.3.3 and JSF 2.0.

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

하지만 더 단계도 수행해야이 특정 예외를 해결하는 핵심 단계는 JSF 2 Facelets의 핸들러를 확인하지 않도록 다음과 같은 컨텍스트 파라미터를 추가한다.가이드를 철저히 읽으십시오.

+0

대단히 감사합니다. 지침을 따라 왔지만 여전히 오류가 발생했습니다. 편집을 참조하십시오. –

+0

그건 다른 문제입니다. 이것은 구성 요소의'value' 속성 대신'binding' 속성을 잘못 사용하여 그 값을 백업 빈에 바인드 할 때 발생할 수 있습니다. 다른 예외에 대해서는 별도의 질문을하십시오. – BalusC

0

이 오류를 해결하려면 응용 프로그램에서 Ajax4jsf 라이브러리를 제거해야했습니다. 분명히 Ajax4jsf 라이브러리는 JSF 2.0과 호환되지 않습니다.

여기 내가 이것을 발견했습니다.
Migrating JSF 1.1 with Ajax4jsf-1.x to JSF2

관련 문제