[ 
https://issues.apache.org/jira/browse/TOMAHAWK-1460?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Leonardo Uribe reopened TOMAHAWK-1460:
--------------------------------------


I finally was able to reproduce it using the following structure:

        <t:dataList value="#{test.someList}" var="row" preserveDataModel="true">
            <t:dataTable value="#{bean.map[row.id]}" var="item" 
preserveDataModel="true">
.......

The exception is this:

javax.faces.FacesException: java.lang.ClassCastException: 
javax.faces.model.ListDataModel cannot be cast to 
org.apache.myfaces.component.html.ext._SerializableDataModel
        at 
org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.wrap(ExceptionHandlerImpl.java:241)
        at 
org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:156)
        at 
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:191)
        at 
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
        at 
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
        at 
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378)
        at 
org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
        at 
org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
        at 
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
        at 
org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:67)
        at 
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at 
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
        at 
org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101)
        at 
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at 
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
        at 
org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)
        at 
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at 
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
        at 
org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:116)
        at 
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at 
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
        at 
org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
        at 
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at 
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
        at 
org.springframework.security.ui.basicauth.BasicProcessingFilter.doFilterHttp(BasicProcessingFilter.java:174)
        at 
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at 
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
        at 
org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:278)
        at 
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at 
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
        at 
org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
        at 
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at 
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
        at 
org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
        at 
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at 
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
        at 
org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175)
        at 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
        at 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at 
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:392)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at 
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
        at 
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
        at 
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
        at 
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
        at 
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
        at 
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
        at 
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
        at org.mortbay.jetty.Server.handle(Server.java:326)
        at 
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:536)
        at 
org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:930)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:747)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:405)
        at 
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
        at 
org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: java.lang.ClassCastException: javax.faces.model.ListDataModel cannot 
be cast to org.apache.myfaces.component.html.ext._SerializableDataModel
        at 
org.apache.myfaces.component.html.ext.AbstractHtmlDataTable.updateModelFromPreservedDataModel(AbstractHtmlDataTable.java:914)
        at 
org.apache.myfaces.component.html.ext.AbstractHtmlDataTable.processUpdates(AbstractHtmlDataTable.java:900)
        at 
javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1258)
        at 
org.apache.myfaces.custom.datalist.AbstractHtmlDataList.process(AbstractHtmlDataList.java:178)
        at 
org.apache.myfaces.custom.datalist.AbstractHtmlDataList.processChildren(AbstractHtmlDataList.java:157)
        at 
org.apache.myfaces.custom.datalist.AbstractHtmlDataList.processUpdates(AbstractHtmlDataList.java:102)
        at javax.faces.component.UIForm.processUpdates(UIForm.java:176)
        at 
javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1258)
        at 
javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1258)
        at 
javax.faces.component.UIViewRoot._processUpdatesDefault(UIViewRoot.java:1270)
        at javax.faces.component.UIViewRoot.access$600(UIViewRoot.java:73)
        at 
javax.faces.component.UIViewRoot$UpdateModelPhaseProcessor.process(UIViewRoot.java:1344)
        at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1231)
        at javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:714)
        at 
org.apache.myfaces.lifecycle.UpdateModelValuesExecutor.execute(UpdateModelValuesExecutor.java:34)
        at 
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171)


> ClassCastException when testing Tomahawk 1.1.9 table demos when 
> preserveDataModel="true"
> ----------------------------------------------------------------------------------------
>
>                 Key: TOMAHAWK-1460
>                 URL: https://issues.apache.org/jira/browse/TOMAHAWK-1460
>             Project: MyFaces Tomahawk
>          Issue Type: Bug
>          Components: Extended Datatable
>    Affects Versions: 1.1.9
>         Environment: Mac OS 10.5.8
> JDK 1.6.0
> Mojarra 2.0.0-SNAPSHOT
> Glassfish V3
>            Reporter: Ryan Lubke
>            Assignee: Leonardo Uribe
>             Fix For: 1.1.10-SNAPSHOT
>
>
> When executing 'Paged and Sortable', 'Master-Detail', and 'Optional
> Header/Footer', a class cast exception is raised during post-back operations 
> to
> update the view.
> java.lang.ClassCastException: javax.faces.model.ListDataModel cannot be cast 
> to
> org.apache.myfaces.component.html.ext._SerializableDataModel
>       at
> org.apache.myfaces.component.html.ext.AbstractHtmlDataTable.updateModelFromPreservedDataModel(AbstractHtmlDataTable.java:493)
>       at
> org.apache.myfaces.component.html.ext.AbstractHtmlDataTable.processUpdates(AbstractHtmlDataTable.java:479)
>       at 
> javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1108)
>       at javax.faces.component.UIForm.processUpdates(UIForm.java:265)
>       at 
> javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1108)
>       at javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:1238)
> I've done some debugging here and have found this block of code being executed
> during processRestoreState():
> protected DataModel getDataModel()
> {
>     if (_preservedDataModel != null)
>     {
>         setDataModel(_preservedDataModel);
>         _preservedDataModel = null;
>     }
>     return super.getDataModel();
> }
> The call stack at this point in time is:
>  at
> org.apache.myfaces.component.html.ext.AbstractHtmlDataTable.getDataModel(AbstractHtmlDataTable.java:839)
>         at
> org.apache.myfaces.component.html.ext.HtmlDataTableHack.setRowIndex(HtmlDataTableHack.java:282)
>         at
> org.apache.myfaces.component.html.ext.AbstractHtmlDataTable.setRowIndex(AbstractHtmlDataTable.java:276)
>         at javax.faces.component.UIData.visitColumnsAndRows(UIData.java:1539)
>         at javax.faces.component.UIData.visitTree(UIData.java:1207)
>         at javax.faces.component.UIComponent.visitTree(UIComponent.java:1454)
>         at javax.faces.component.UIComponent.visitTree(UIComponent.java:1454)
>         at javax.faces.component.UIForm.visitTree(UIForm.java:333)
>         at javax.faces.component.UIComponent.visitTree(UIComponent.java:1454)
>         at 
> javax.faces.component.UIViewRoot.processRestoreState(UIViewRoot.java:868)
> The interesting point here is that _preserveDataModel is set to null.
> Later, during processUpdates(), updateModelFromPreservedDataModel() will 
> call getDataModel (as listed above), however, since _preservedDataModel was 
> set
> to null, the call is delegated to the super class, UIData, which returns
> ListDataModel.
> This change in the code path is new spec required functionality where 
> UIViewRoot.processRestoreState()
> uses the TreeVisitor to notify components of the PostRestoreStateEvent.  
> Given this, I'm sure the 
> problem will be manifest with MyFaces 2.0.0.
> WORKAROUND: set preservDataModel to false.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to