java.lang.ClassCastException:javax.faces.component.StateHolderSaver无法强制转换为[Ljava.lang.Object;

时间:2013-09-10 12:57:02

标签: jsf jsf-2 liferay liferay-6

我在xhtml页面中显示带有链接的项目列表。当我从该链接点击“返回上一页”按钮时,我基本上重置了我的bean中的标志,以向xhtml指示要显示的页面,并从我的数据库重新加载链接列表。

当我在这个新页面中点击相同的链接(或任何其他链接)时,我收到此错误:

javax.portlet.faces.BridgeException: javax.portlet.faces.BridgeException: javax.faces.FacesException: 
   Unexpected error restoring state for component with id A8351:j_idt7:j_idt10:j_idt59.  
   Cause: java.lang.ClassCastException: javax.faces.component.StateHolderSaver cannot be cast to [Ljava.lang.Object;.
    at com.liferay.faces.bridge.BridgePhaseActionImpl.execute(BridgePhaseActionImpl.java:105)
    at com.liferay.faces.bridge.BridgeImpl.doFacesRequest(BridgeImpl.java:81)
        at javax.portlet.faces.GenericFacesPortlet.processAction(GenericFacesPortlet.java:152)
    at com.ncs.portalcity.lfe.faces.bridge.FacesPortlet.processAction(FacesPortlet.java:47)
    at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:70)
    at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:48)
    at com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:111)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    ...
    ...
Caused by: javax.faces.FacesException: Unexpected error restoring state for component
with id A8351:j_idt7:j_idt10:j_idt59.  Cause: java.lang.ClassCastException: javax.faces.component.StateHolderSaver cannot be cast to [Ljava.lang.Object;.
    at com.sun.faces.application.view.StateManagementStrategyImpl$2.visit(StateManagementStrategyImpl.java:284)
    at com.sun.faces.component.visit.FullVisitContext.invokeVisitCallback(FullVisitContext.java:151)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1589)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
    at javax.faces.component.UIForm.visitTree(UIForm.java:344)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
    at com.sun.faces.application.view.StateManagementStrategyImpl.restoreView(StateManagementStrategyImpl.java:263)
    at com.sun.faces.application.StateManagerImpl.restoreView(StateManagerImpl.java:188)
    at com.sun.faces.application.view.ViewHandlingStrategy.restoreView(ViewHandlingStrategy.java:123)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.restoreView(FaceletViewHandlingStrategy.java:452)
    at com.sun.faces.application.view.MultiViewHandler.restoreView(MultiViewHandler.java:148)
    at javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:303)
    at com.liferay.faces.bridge.application.ViewHandlerImpl.restoreView(ViewHandlerImpl.java:88)
    at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:192)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at com.liferay.faces.bridge.lifecycle.LifecycleWrapper.execute(LifecycleWrapper.java:35)
    at com.liferay.faces.bridge.BridgePhaseActionImpl.execute(BridgePhaseActionImpl.java:77)
    ... 142 more
Caused by: java.lang.ClassCastException: javax.faces.component.StateHolderSaver cannot be cast to [Ljava.lang.Object;
    at javax.faces.component.behavior.AjaxBehavior.restoreState(AjaxBehavior.java:459)
    at javax.faces.component.UIComponentBase.restoreBehaviors(UIComponentBase.java:2184)
    at javax.faces.component.UIComponentBase.restoreBehaviorsState(UIComponentBase.java:2151)
    at javax.faces.component.UIComponentBase.restoreState(UIComponentBase.java:1571)
    at com.sun.faces.application.view.StateManagementStrategyImpl$2.visit(StateManagementStrategyImpl.java:276)
    ... 162 more

如果我刷新页面并再试一次,则没有问题。有谁知道我做错了什么?

----编辑----

以防万一其他人使用liferay有这个问题,我只是在我的pom.xml中添加了这些行,现在就可以了:)非常感谢BaluC!

<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>2.1.21</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-impl</artifactId>
    <version>2.1.21</version>
    <scope>compile</scope>
</dependency>

1 个答案:

答案 0 :(得分:2)

这是一个已知的Mojarra问题,已经报告为issue 2041,已在Mojarra 2.1.12中修复。

因此,只需将您的JSF库升级到至少Mojarra 2.1.12即可。它目前已经是2.1.26,与2.1.12相比,还有更多与州管理相关的修复。