javax.faces.FacesException:java.lang.ClassCastException:java.lang.String无法强制转换为javax.faces.component.UIComponent

时间:2012-01-13 13:07:35

标签: java-ee jsf-2 richfaces glassfish-3

我的Java EE Web应用程序与Glassfish 2.1一起正常工作。现在我想迁移到Glassfish 3.1.1

我已按照提供的here

进行了修改

我对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">
faces-config中的 如下: -

 <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中工作正常,所以我认为没有关于属性与支持bean绑定的问题。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:17)

  

java.lang.ClassCastException:java.lang.String无法强制转换为javax.faces.component.UIComponent       在com.sun.faces.application.ApplicationImpl.createComponentApplyAnnotations

当您拥有String值属性(如

)时,会发生此特殊异常
private String value;

并使用binding属性将其绑定到组件:

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

这是不正确的。应使用value属性绑定该值:

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

binding仅用于将整个组件(它是UIComponent的实例)绑定到辅助bean,例如以编程方式修改它。

验证您的login.xhtml代码。如果有必要尽可能地删除代码,只要你仍然可以重现问题,这样你就可以得到尽可能小的代码片段,它可以重现这个问题,让你更容易找到罪魁祸首。

另见: