[ 
https://issues.apache.org/jira/browse/TOMAHAWK-1460?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13026902#comment-13026902
 ] 

Krashan Brahmanjara commented on TOMAHAWK-1460:
-----------------------------------------------

>Are you using nested datatables with preserveDataModel="true"
True. This is that case. 
I't looks that nested datatables for jsf 1.1 doesn't support Input tag's 
correctly. Framework doesn't generate unique identfiers for rows and inputs so 
only inputs from first row are updated correctly.

BTW.
Class cast can be easily patched on AbstractHtmlDataTable.java. Patch below is 
for jsf1.1 AbstractHtmlDataTable.java
648,649c648
<                       //_SerializableDataModel dm = (_SerializableDataModel) 
getDataModel();
<             _SerializableDataModel dm = (_SerializableDataModel) 
getSerializableDataModel();
---
>             _SerializableDataModel dm = (_SerializableDataModel) 
> getDataModel();
1105,1107c1104
<               //return createSerializableDataModel();
<               _preservedDataModel = createSerializableDataModel();
<         return _preservedDataModel;
---
>         return createSerializableDataModel();


> 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
>
>
> 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.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to