You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2010/08/19 21:03:17 UTC
svn commit: r987269 -
/myfaces/tomahawk/trunk/core12/src/main/java/org/apache/myfaces/component/html/ext/AbstractHtmlDataTable.java
Author: lu4242
Date: Thu Aug 19 19:03:17 2010
New Revision: 987269
URL: http://svn.apache.org/viewvc?rev=987269&view=rev
Log:
TOMAHAWK-1460 ClassCastException when testing Tomahawk 1.1.9 table demos when preserveDataModel="true"
Modified:
myfaces/tomahawk/trunk/core12/src/main/java/org/apache/myfaces/component/html/ext/AbstractHtmlDataTable.java
Modified: myfaces/tomahawk/trunk/core12/src/main/java/org/apache/myfaces/component/html/ext/AbstractHtmlDataTable.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core12/src/main/java/org/apache/myfaces/component/html/ext/AbstractHtmlDataTable.java?rev=987269&r1=987268&r2=987269&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core12/src/main/java/org/apache/myfaces/component/html/ext/AbstractHtmlDataTable.java (original)
+++ myfaces/tomahawk/trunk/core12/src/main/java/org/apache/myfaces/component/html/ext/AbstractHtmlDataTable.java Thu Aug 19 19:03:17 2010
@@ -18,17 +18,17 @@
*/
package org.apache.myfaces.component.html.ext;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.myfaces.component.NewspaperTable;
-import org.apache.myfaces.component.UserRoleAware;
-import org.apache.myfaces.component.UserRoleUtils;
-import org.apache.myfaces.custom.column.HtmlSimpleColumn;
-import org.apache.myfaces.custom.crosstable.UIColumns;
-import org.apache.myfaces.custom.sortheader.HtmlCommandSortHeader;
-import org.apache.myfaces.renderkit.html.ext.HtmlTableRenderer;
-import org.apache.myfaces.renderkit.html.util.TableContext;
-import org.apache.myfaces.shared_tomahawk.renderkit.JSFAttr;
+import java.io.IOException;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
import javax.faces.FacesException;
import javax.faces.application.Application;
@@ -37,21 +37,23 @@ import javax.faces.component.EditableVal
import javax.faces.component.NamingContainer;
import javax.faces.component.UIColumn;
import javax.faces.component.UIComponent;
+import javax.faces.component.UIComponentBase;
import javax.faces.component.UINamingContainer;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;
import javax.faces.model.DataModel;
-import java.io.IOException;
-import java.sql.ResultSet;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.component.NewspaperTable;
+import org.apache.myfaces.component.UserRoleAware;
+import org.apache.myfaces.component.UserRoleUtils;
+import org.apache.myfaces.custom.column.HtmlSimpleColumn;
+import org.apache.myfaces.custom.crosstable.UIColumns;
+import org.apache.myfaces.custom.sortheader.HtmlCommandSortHeader;
+import org.apache.myfaces.renderkit.html.ext.HtmlTableRenderer;
+import org.apache.myfaces.renderkit.html.util.TableContext;
+import org.apache.myfaces.shared_tomahawk.renderkit.JSFAttr;
/**
* The MyFacesDataTable extends the standard JSF DataTable by two
@@ -106,7 +108,7 @@ public abstract class AbstractHtmlDataTa
public static final String DETAIL_STAMP_FACET_NAME = "detailStamp";
- private _SerializableDataModel _preservedDataModel;
+ private Map _preservedDataModel = new HashMap();
private String _forceIdIndexFormula = null;
private String _sortColumn = null;
@@ -655,7 +657,7 @@ public abstract class AbstractHtmlDataTa
}
}
}
- _preservedDataModel = null;
+ setPreservedDataModel(null);
}
public void encodeBegin(FacesContext context) throws IOException
@@ -665,7 +667,7 @@ public abstract class AbstractHtmlDataTa
if (_isValidChildren && !hasErrorMessages(context))
{
- _preservedDataModel = null;
+ setPreservedDataModel(null);
}
for (Iterator iter = getChildren().iterator(); iter.hasNext();)
@@ -865,6 +867,11 @@ public abstract class AbstractHtmlDataTa
((UIColumns) component).encodeTableEnd(context);
}
}
+
+ if (isPreserveDataModel())
+ {
+ setPreservedDataModel(getSerializableDataModel());
+ }
}
/**
@@ -874,10 +881,11 @@ public abstract class AbstractHtmlDataTa
*/
public int getFirst()
{
- if (_preservedDataModel != null)
+ _SerializableDataModel pdm = getPreservedDataModel();
+ if (pdm != null)
{
//Rather get the currently restored DataModel attribute
- return _preservedDataModel.getFirst();
+ return pdm.getFirst();
}
else
{
@@ -887,10 +895,11 @@ public abstract class AbstractHtmlDataTa
public void setFirst(int first)
{
- if (_preservedDataModel != null)
+ _SerializableDataModel pdm = getPreservedDataModel();
+ if (pdm != null)
{
//Also change the currently restored DataModel attribute
- _preservedDataModel.setFirst(first);
+ pdm.setFirst(first);
}
super.setFirst(first);
}
@@ -902,10 +911,11 @@ public abstract class AbstractHtmlDataTa
*/
public int getRows()
{
- if (_preservedDataModel != null)
+ _SerializableDataModel pdm = getPreservedDataModel();
+ if (pdm != null)
{
//Rather get the currently restored DataModel attribute
- return _preservedDataModel.getRows();
+ return pdm.getRows();
}
else
{
@@ -915,10 +925,11 @@ public abstract class AbstractHtmlDataTa
public void setRows(int rows)
{
- if (_preservedDataModel != null)
+ _SerializableDataModel pdm = getPreservedDataModel();
+ if (pdm != null)
{
//Also change the currently restored DataModel attribute
- _preservedDataModel.setRows(rows);
+ pdm.setRows(rows);
}
super.setRows(rows);
}
@@ -933,8 +944,23 @@ public abstract class AbstractHtmlDataTa
if (isPreserveDataModel())
{
- _preservedDataModel = getSerializableDataModel();
- values[2] = saveAttachedState(context, _preservedDataModel);
+ if (!_preservedDataModel.isEmpty())
+ {
+ int cnt = 0;
+ Object[] mapArr = new Object[_preservedDataModel.size() * 2];
+ for (Iterator it = _preservedDataModel.entrySet().iterator(); it.hasNext();)
+ {
+ Map.Entry entry = (Map.Entry) it.next();
+ mapArr[cnt] = (String) entry.getKey();
+ mapArr[cnt + 1] = (_SerializableDataModel)saveAttachedState(context, entry.getValue());
+ cnt += 2;
+ }
+ values[2] = mapArr;
+ }
+ else
+ {
+ values[2] = null;
+ }
}
else
{
@@ -964,10 +990,11 @@ public abstract class AbstractHtmlDataTa
*/
protected DataModel getDataModel()
{
- if (_preservedDataModel != null)
+ _SerializableDataModel pdm = getPreservedDataModel();
+ if (pdm != null)
{
- setDataModel(_preservedDataModel);
- _preservedDataModel = null;
+ setDataModel(pdm);
+ setPreservedDataModel(null);
}
return super.getDataModel();
@@ -1027,11 +1054,26 @@ public abstract class AbstractHtmlDataTa
_preserveDataModel = (Boolean) values[1];
if (isPreserveDataModel())
{
- _preservedDataModel = (_SerializableDataModel) restoreAttachedState(context, values[2]);
+ if (!_preservedDataModel.isEmpty())
+ {
+ _preservedDataModel.clear();
+ }
+ Object[] listAsMap = (Object[]) values[2];
+ if (listAsMap != null)
+ {
+ for (int cnt = 0; cnt < listAsMap.length; cnt += 2)
+ {
+ _preservedDataModel.put((String) listAsMap[cnt], (_SerializableDataModel) UIComponentBase
+ .restoreAttachedState(context, listAsMap[cnt + 1]));
+ }
+ }
}
else
{
- _preservedDataModel = null;
+ if (!_preservedDataModel.isEmpty())
+ {
+ _preservedDataModel.clear();
+ }
}
_preserveSort = (Boolean) values[3];
_forceIdIndexFormula = (String) values[4];
@@ -1447,12 +1489,31 @@ public abstract class AbstractHtmlDataTa
protected _SerializableDataModel getPreservedDataModel()
{
- return _preservedDataModel;
+ UIComponent parent = getParent();
+ String clientID = "";
+ if (parent != null)
+ {
+ clientID = parent.getClientId(getFacesContext());
+ }
+ return (_SerializableDataModel) _preservedDataModel.get(clientID);
}
- protected void setPreservedDataModel(_SerializableDataModel preservedDataModel)
+ protected void setPreservedDataModel(_SerializableDataModel datamodel)
{
- _preservedDataModel = preservedDataModel;
+ UIComponent parent = getParent();
+ String clientID = "";
+ if(parent != null)
+ {
+ clientID = parent.getClientId(getFacesContext());
+ }
+ if (datamodel == null)
+ {
+ _preservedDataModel.remove(clientID);
+ }
+ else
+ {
+ _preservedDataModel.put(clientID, datamodel);
+ }
}