java.lang.IllegalStateException: незаконная попытка установить ViewHandler после того, как ответ был представлен - PullRequest
1 голос
/ 12 января 2012

Мое веб-приложение Java EE отлично работает со Glassfish 2.1. Теперь я хочу перейти на Glassfish 3.1.1, но после успешного развертывания файла war выдает следующую ошибку:

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 Framework 3.0.2
  • JSF 2.0
  • RichFaces 3.3.3 Финал

Он скомпилирован с JDK 1.6.

Как возникает эта проблема и как я могу ее решить?

EDIT

Я следил за предоставленными изменениями здесь

мои зависимости для richfaces следующие: -

   <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 следующим образом: -

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

my в лицах-конфигурации выглядит следующим образом: -

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

как я могу решить эту проблему?

Ответы [ 2 ]

6 голосов
/ 12 января 2012

java.lang.IllegalStateException: недопустимая попытка установить ViewHandler после обработки ответа.

Это типичное сообщение об ошибке при использовании целевой библиотеки компонентов JSF 1.2 вСреда JSF 2.x.RichFaces 3.3.x разработан для JSF 1.2, но Glassfish 3.1 поставляется с JSF 2.1 вместо JSF 1.2, как в Glassfish 2.1.В JSF 2 довольно много изменений в области обработки представлений, потому что JSP устарел и заменен Facelets.

RichFaces имеет отличное руководство по установке и настройке RichFaces 3.3.3 в JSF.2 окружение: RichFaces 3.3.3 и 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 голосов
/ 20 февраля 2016

Мне пришлось удалить библиотеку Ajax4jsf из моего приложения, прежде чем я смог устранить эту ошибку.Очевидно, библиотека Ajax4jsf не совместима с JSF 2.0.

Здесь, где я нашел это.
Миграция JSF 1.1 с Ajax4jsf-1.x в JSF2

...