0

我在我的 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>
4

1 回答 1

2

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

因此,只需将您的 JSF 库升级到至少 Mojarra 2.1.12 就可以了。它目前已经在 2.1.26,与 2.1.12 相比,有更多与状态管理和喜欢相关的修复。

于 2013-09-10T13:25:17.037 回答