myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Leonardo Uribe (JIRA)" <...@myfaces.apache.org>
Subject [jira] Resolved: (TOMAHAWK-1460) ClassCastException when testing Tomahawk 1.1.9 table demos when preserveDataModel="true"
Date Fri, 03 Sep 2010 02:33:33 GMT

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

Leonardo Uribe resolved TOMAHAWK-1460.
--------------------------------------

    Resolution: Fixed

After testing it, it seems the problem was caused by TOMAHAWK-1545. I'll close this one as
fixed for now, because with the latest code I can't reproduce it after previous fixes. Anyway,
I added a check for _SerializableDataModel on updateModelFromPreservedDataModel, because it
is possible in jsf 2.0 to reach that point with a non serializable datamodel, and the are
not side effects if that so. 

> 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.


Mime
View raw message