javax.faces.FacesException: java.lang.ClassCastException: java.lang.String не может быть приведен к javax.faces.component.UIComponent. - PullRequest
4 голосов
/ 13 января 2012

Мое веб-приложение Java EE отлично работает со Glassfish 2.1. Теперь я хочу перейти на Glassfish 3.1.1

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

мои зависимости для 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)

Он работает нормально вGlassfish 2, поэтому я думаю, что нет никаких проблем, связанных с привязкой атрибутов с бобом.

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

1 Ответ

17 голосов
/ 13 января 2012

java.lang.ClassCastException: java.lang.String не может быть приведен к javax.faces.component.UIComponent. в com.sun.faces.application.ApplicationImpl.createComponentApplyAnnotations

Это конкретное исключение произойдет, если у вас есть свойство String value, например

private String value;

и привязывает его к компоненту с помощью атрибута binding:

<h:inputText binding="#{bean.value}" />

Это неверно. Значение должно быть связано с использованием атрибута value:

<h:inputText value="#{bean.value}" />

binding используется только для связывания всего компонента (который является экземпляром UIComponent) с базовым компонентом, например, для его программного изменения.

Проверьте код login.xhtml. При необходимости вырежьте как можно больше кода, пока вы все еще можете воспроизвести проблему, чтобы вы могли получить наименьший возможный фрагмент кода, который воспроизводит именно эту проблему, которая должна позволить вам легче найти виновника.

Смотри также:

...