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:02:44 UTC
svn commit: r987268 -
/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/AbstractHtmlDataTable.java
Author: lu4242
Date: Thu Aug 19 19:02:43 2010
New Revision: 987268
URL: http://svn.apache.org/viewvc?rev=987268&view=rev
Log:
TOMAHAWK-1460 ClassCastException when testing Tomahawk 1.1.9 table demos when preserveDataModel="true"
Modified:
myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/AbstractHtmlDataTable.java
Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/AbstractHtmlDataTable.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/AbstractHtmlDataTable.java?rev=987268&r1=987267&r2=987268&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/AbstractHtmlDataTable.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/AbstractHtmlDataTable.java Thu Aug 19 19:02:43 2010
@@ -18,26 +18,6 @@
*/
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 javax.faces.application.Application;
-import javax.faces.component.EditableValueHolder;
-import javax.faces.component.NamingContainer;
-import javax.faces.component.UIColumn;
-import javax.faces.component.UIComponent;
-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;
@@ -50,6 +30,28 @@ import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
+import javax.faces.application.Application;
+import javax.faces.component.EditableValueHolder;
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIColumn;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIComponentBase;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
+import javax.faces.model.DataModel;
+
+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
* important features:
@@ -101,7 +103,7 @@ public abstract class AbstractHtmlDataTa
public static final String SPACER_FACET_NAME = "spacer";
public static final String NEWSPAPER_ORIENTATION_PROPERTY = "newspaperOrientation";
- private _SerializableDataModel _preservedDataModel;
+ private Map _preservedDataModel = new HashMap();
private String _forceIdIndexFormula = null;
private String _sortColumn = null;
@@ -524,7 +526,7 @@ public abstract class AbstractHtmlDataTa
}
}
}
- _preservedDataModel = null;
+ setPreservedDataModel(null);
}
public void encodeBegin(FacesContext context) throws IOException
@@ -534,7 +536,7 @@ public abstract class AbstractHtmlDataTa
if (_isValidChildren && !hasErrorMessages(context))
{
- _preservedDataModel = null;
+ setPreservedDataModel(null);
}
for (Iterator iter = getChildren().iterator(); iter.hasNext();)
@@ -734,6 +736,11 @@ public abstract class AbstractHtmlDataTa
((UIColumns) component).encodeTableEnd(context);
}
}
+
+ if (isPreserveDataModel())
+ {
+ setPreservedDataModel(getSerializableDataModel());
+ }
}
/**
@@ -743,10 +750,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
{
@@ -756,10 +764,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);
}
@@ -771,10 +780,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
{
@@ -784,10 +794,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);
}
@@ -802,8 +813,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
{
@@ -833,10 +859,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();
@@ -896,11 +923,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];
@@ -1316,12 +1358,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);
+ }
}