You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by mm...@apache.org on 2006/04/25 17:56:47 UTC

svn commit: r396904 - in /myfaces: shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/ tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/ tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/sortheader...

Author: mmarinschek
Date: Tue Apr 25 08:56:44 2006
New Revision: 396904

URL: http://svn.apache.org/viewcvs?rev=396904&view=rev
Log:
TOMAHAWK-385, TOMAHAWK-386 patches commited

Modified:
    myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTableRendererBase.java
    myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/HtmlDataTable.java
    myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/SortableModel.java
    myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/sortheader/HtmlCommandSortHeader.java
    myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/sortheader/HtmlSortHeaderRenderer.java
    myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlTableRenderer.java
    myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/taglib/html/ext/HtmlDataTableTag.java
    myfaces/tomahawk/trunk/core/src/main/tld/entities/extended_data_table_attributes.xml

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTableRendererBase.java
URL: http://svn.apache.org/viewcvs/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTableRendererBase.java?rev=396904&r1=396903&r2=396904&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTableRendererBase.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTableRendererBase.java Tue Apr 25 08:56:44 2006
@@ -162,9 +162,17 @@
             for (int j = 0, size = getChildCount(component); j < size; j++)
             {
                 UIComponent child = (UIComponent) children.get(j);
-                if(child.isRendered())
+                if (child.isRendered())
                 {
-                    encodeColumnChild(facesContext, writer, uiData, child, columnStyleIterator);
+                    boolean columnRendering = child instanceof UIColumn;
+                    
+                    if (columnRendering)
+                        beforeColumn(facesContext, uiData, j);
+                       
+                    encodeColumnChild(facesContext, writer, uiData, child, columnStyleIterator);                    
+                    
+                    if (columnRendering)
+                        afterColumn(facesContext, uiData, j);
                 }
             }
             renderRowEnd(facesContext, writer, uiData);
@@ -177,8 +185,8 @@
         UIData uiData, UIComponent component, Iterator columnStyleIterator) throws IOException
     {
         if (component instanceof UIColumn)
-        {
-            renderColumnBody(facesContext, writer, uiData, component, columnStyleIterator);
+        {            
+            renderColumnBody(facesContext, writer, uiData, component, columnStyleIterator);            
         }
     }
 
@@ -312,7 +320,48 @@
     protected void afterRow(FacesContext facesContext, UIData uiData) throws IOException
     {
     }
-
+    /**
+     * Perform any operations necessary immediately before each column child is rendered
+     *
+     * @param facesContext the <code>FacesContext</code>.
+     * @param uiData the <code>UIData</code> being rendered.
+     * @param columnIndex the index of the currenly rendered column
+     */
+    protected void beforeColumn(FacesContext facesContext, UIData uiData, int columnIndex) throws IOException
+    {        
+    }
+    /**
+     * Perform any operations necessary immediately after each column child is rendered
+     *
+     * @param facesContext the <code>FacesContext</code>.
+     * @param uiData the <code>UIData</code> being rendered.
+     * @param columnIndex the index of the currenly rendered column
+     */
+    protected void afterColumn(FacesContext facesContext, UIData uiData, int columnIndex) throws IOException
+    {        
+    }
+    /**
+     *Perform any operations necessary immediately before each column child's header or footer is rendered
+     *
+     * @param facesContext the <code>FacesContext</code>.
+     * @param uiData the <code>UIData</code> being rendered.
+     * @param header true if the header of the column child is rendered
+     * @param columnIndex the index of the currenly rendered column
+     */
+    protected void beforeColumnHeaderOrFooter(FacesContext facesContext, UIData uiData, boolean header, int columnIndex) throws IOException
+    {         
+    }
+    /**
+     * Perform any operations necessary immediately after each column child's header of footer is rendered
+     *
+     * @param facesContext the <code>FacesContext</code>.
+     * @param uiData the <code>UIData</code> being rendered.
+     * @param header true if the header of the column child is rendered
+     * @param columnIndex the index of the currenly rendered column
+     */
+    protected void afterColumnHeaderOrFooter(FacesContext facesContext, UIData uiData, boolean header, int columnIndex) throws IOException
+    {         
+    }
     /**
      * Perform any operations necessary immediately after the TBODY end tag
      * is output.
@@ -554,13 +603,21 @@
         HtmlRendererUtils.writePrettyLineSeparator(facesContext);
 
         writer.startElement(HTML.TR_ELEM, component);
+        int columnIndex = 0;
         for (Iterator it = getChildren(component).iterator(); it.hasNext();)
         {
             UIComponent uiComponent = (UIComponent) it.next();
-            if(uiComponent.isRendered())
+            if (uiComponent.isRendered())
             {
+                if (component instanceof UIData && uiComponent instanceof UIColumn)
+                    beforeColumnHeaderOrFooter(facesContext, (UIData)component, header, columnIndex);
+                
                 renderColumnChildHeaderOrFooterRow(facesContext, writer, uiComponent, styleClass, header);
+                
+                if (component instanceof UIData && uiComponent instanceof UIColumn)
+                    afterColumnHeaderOrFooter(facesContext, (UIData)component, header, columnIndex);
             }
+            columnIndex += 1;
         }
         writer.endElement(HTML.TR_ELEM);
     }

Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/HtmlDataTable.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/HtmlDataTable.java?rev=396904&r1=396903&r2=396904&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/HtmlDataTable.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/HtmlDataTable.java Tue Apr 25 08:56:44 2006
@@ -77,7 +77,9 @@
     private String _rowGroupStyle = null;
     private String _rowGroupStyleClass = null;
     private String _varDetailToggler = null;
-
+    
+    private int _sortColumnIndex = -1;
+    
     private boolean _isValidChildren = true;
 
     private Set _expandedNodes = new HashSet();
@@ -255,7 +257,7 @@
             Map requestMap = getFacesContext().getExternalContext().getRequestMap();
             requestMap.put(_varDetailToggler, this);
         }
-    }
+    }       
 
     public void processDecodes(FacesContext context)
     {
@@ -515,7 +517,10 @@
      *
      */
     protected String getSortPropertyFromEL(UIComponent component)
-    {
+    {        
+        if (getVar() == null)
+            return null;
+        
         for (Iterator iter = component.getChildren().iterator(); iter.hasNext();)
         {
             UIComponent aChild = (UIComponent) iter.next();
@@ -528,8 +533,16 @@
                 {
                     String expressionString = vb.getExpressionString();
                     
-                    String temp = expressionString.substring(expressionString.indexOf(".") + 1);        
-                    return temp.substring(0, temp.indexOf("}"));                    
+                    int varIndex = expressionString.indexOf(getVar()+".");
+                    if (varIndex != -1)
+                    {
+                        int varEndIndex = varIndex + getVar().length();
+                        String tempProp = expressionString.substring(varEndIndex + 1, expressionString.length()); 
+                        
+                        StringTokenizer tokenizer = new StringTokenizer(tempProp, " +[]{}-/*|?:&<>!=()%");
+                        if (tokenizer.hasMoreTokens())
+                            return tokenizer.nextToken();
+                    }
                 }
             }
             else getSortPropertyFromEL(aChild);
@@ -537,7 +550,32 @@
         
         return null;
     }
-
+    /**
+     * @return the index coresponding to the given column name.
+     */
+    protected int columnNameToIndex(String columnName)
+    {        
+        int index = 0;
+        for (Iterator iter = getChildren().iterator(); iter.hasNext();)
+        {
+            UIComponent aChild = (UIComponent)iter.next();              
+            if (aChild instanceof UIColumn)
+            {
+                UIComponent headerFacet = ((UIColumn)aChild).getHeader();
+                if (headerFacet != null && headerFacet instanceof HtmlCommandSortHeader)
+                {
+                    HtmlCommandSortHeader sortHeader = (HtmlCommandSortHeader)headerFacet;                    
+                    if (columnName != null && columnName.equals(sortHeader.getColumnName()))
+                        return index;
+                }                 
+            }
+            
+            index += 1;
+        }
+        
+        return -1;
+    }
+    
     /**
      * @see javax.faces.component.UIData#encodeEnd(javax.faces.context.FacesContext)
      */
@@ -605,7 +643,7 @@
         boolean preserveSort = isPreserveSort();
         boolean sortable     = isSortable();
         
-        Object values[] = new Object[30];
+        Object values[] = new Object[32];
         values[0] = super.saveState(context);
         values[1] = _preserveDataModel;
         if (isPreserveDataModel())
@@ -647,6 +685,8 @@
         values[27] = _expandedNodes;
         values[28] = _rowGroupStyle;
         values[29] = _rowGroupStyleClass;
+        values[30] = _sortedColumnVar;
+        values[31] = new Integer(_sortColumnIndex);        
 
         return values;
     }
@@ -750,6 +790,8 @@
         _expandedNodes = (Set)values[27];
         _rowGroupStyle = (String)values[28];
         _rowGroupStyleClass = (String)values[29];
+        _sortedColumnVar = (String)values[30];
+        _sortColumnIndex = values[31] != null ? ((Integer)values[31]).intValue() : -1;
     }
 
     public _SerializableDataModel getSerializableDataModel()
@@ -847,7 +889,7 @@
      * but it works.
      */
     public void setSortColumn(String sortColumn)
-    {
+    {        
         _sortColumn = sortColumn;
         // update model is necessary here, because processUpdates is never called
         // reason: HtmlCommandSortHeader.isImmediate() == true
@@ -856,13 +898,14 @@
         {
             vb.setValue(getFacesContext(), _sortColumn);
             _sortColumn = null;
-        }
+        }       
+        
+        setSortColumnIndex(columnNameToIndex(sortColumn));
     }
 
     public String getSortColumn()
     {
-        if (_sortColumn != null)
-            return _sortColumn;
+        if (_sortColumn != null) return _sortColumn;        
         ValueBinding vb = getValueBinding("sortColumn");
         return vb != null ? (String) vb.getValue(getFacesContext()) : null;
     }
@@ -1158,6 +1201,19 @@
         return _expandedNodes.contains(rowIndex);
     }
 
+    public int getSortColumnIndex()
+    {
+        if (_sortColumnIndex == -1)
+            _sortColumnIndex = columnNameToIndex(getSortColumn());
+        
+        return _sortColumnIndex;
+    }
+    
+    public void setSortColumnIndex(int sortColumnIndex)
+    {        
+        _sortColumnIndex = sortColumnIndex;               
+    }       
+    
     //------------------ GENERATED CODE BEGIN (do not modify!) --------------------
 
     public static final String COMPONENT_TYPE = "org.apache.myfaces.HtmlDataTable";
@@ -1174,7 +1230,7 @@
     private Boolean _renderedIfEmpty = null;
     private String _rowIndexVar = null;
     private String _rowCountVar = null;
-    private String _currentColumnVar = null;
+    private String _sortedColumnVar = null;
     private String _previousRowDataVar = null;
 
     public void setPreserveDataModel(boolean preserveDataModel)
@@ -1282,18 +1338,17 @@
             return _previousRowDataVar;
         ValueBinding vb = getValueBinding("previousRowDataVar");
         return vb != null ? (String) vb.getValue(getFacesContext()) : null;
-    }
+    }      
     
-    public void setCurrentColumnVar(String currentColumnVar)
+    public void setSortedColumnVar(String sortedColumnVar)
     {
-        _currentColumnVar = currentColumnVar;
+        _sortedColumnVar = sortedColumnVar;
     }
 
-    public String getCurrentColumnVar()
+    public String getSortedColumnVar()
     {
-        if (_currentColumnVar != null)
-            return _currentColumnVar;
-        ValueBinding vb = getValueBinding("currentColumnVar");
+        if (_sortedColumnVar != null) return _sortedColumnVar;
+        ValueBinding vb = getValueBinding("sortedColumnVar");
         return vb != null ? (String) vb.getValue(getFacesContext()) : null;
     }
 

Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/SortableModel.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/SortableModel.java?rev=396904&r1=396903&r2=396904&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/SortableModel.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/SortableModel.java Tue Apr 25 08:56:44 2006
@@ -16,6 +16,8 @@
 
 package org.apache.myfaces.component.html.ext;
 
+import java.io.StringReader;
+import java.lang.reflect.Method;
 import java.sql.ResultSet;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -23,23 +25,33 @@
 import java.util.Comparator;
 import java.util.List;
 import javax.faces.context.FacesContext;
-import javax.faces.el.PropertyResolver;
+import javax.faces.el.ReferenceSyntaxException;
 import javax.faces.model.ArrayDataModel;
 import javax.faces.model.DataModel;
 import javax.faces.model.ListDataModel;
 import javax.faces.model.ResultDataModel;
 import javax.faces.model.ResultSetDataModel;
 import javax.faces.model.ScalarDataModel;
+import javax.servlet.jsp.el.ELException;
+import javax.servlet.jsp.el.FunctionMapper;
+import javax.servlet.jsp.el.VariableResolver;
 import javax.servlet.jsp.jstl.sql.Result;
+import org.apache.commons.el.Expression;
+import org.apache.commons.el.ExpressionString;
+import org.apache.commons.el.Logger;
+import org.apache.commons.el.parser.ELParser;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 /**
  *
  */
-public final class SortableModel extends DataModel
+public final class SortableModel extends DataModel implements VariableResolver
 {    
     private static final Log log = LogFactory.getLog(SortableModel.class);
+    public static final Logger LOGGER = new Logger(System.out);
+    
+    private static final String ROW_OBJECT_NAME = "rowObjectGet";
     
     private SortCriterion _sortCriterion = null;
     
@@ -51,6 +63,16 @@
     
     private static final Class OBJECT_ARRAY_CLASS = (new Object[0]).getClass();
     
+    protected static FunctionMapper s_functionMapper = new FunctionMapper()
+    {
+        public Method resolveFunction(String prefix, String localName)
+        {
+            throw new ReferenceSyntaxException(
+                "Functions not supported in expressions. Function: "
+                + prefix + ":" + localName);
+        }
+    };
+    
     /**
      * Create a new SortableModel from the given instance.
      * @param model This will be converted into a {@link DataModel}
@@ -87,7 +109,8 @@
      * @param data This Object will be converted into a
      * {@link DataModel}.
      */
-    public void setWrappedData(Object data) {
+    public void setWrappedData(Object data) 
+    {
         _baseIndicesList = null;
         _model = toDataModel(data);
         _sortCriterion = null;
@@ -163,12 +186,9 @@
             if (!_model.isRowAvailable())
                 return false; // if there is no data in the table then nothing is sortable
             
-            Object data = _model.getRowData();
             try 
-            {
-                FacesContext context = FacesContext.getCurrentInstance();
-                PropertyResolver resolver = context.getApplication().getPropertyResolver();
-                Object propertyValue = resolver.getValue(data, property);
+            {   
+                Object propertyValue = getPropertyValue(property);
                 
                 // when the value is null, we don't know if we can sort it.
                 // by default let's support sorting of null values, and let the user
@@ -248,9 +268,9 @@
         _model.setRowIndex(0);
         // Make sure the model has that row 0! (It could be empty.)
         if (_model.isRowAvailable()) 
-        {
-            FacesContext context = FacesContext.getCurrentInstance();
-            Comparator comp = new Comp(context. getApplication().getPropertyResolver(), property);
+        {            
+            Comparator comp = new Comp(property);                       
+            
             if (!isAscending)
                 comp = new Inverter(comp);
             
@@ -292,7 +312,40 @@
         }
         return index;
     }       
+    
+    protected Object getPropertyValue(String property)
+    {
+        String expressionString = "${"+ROW_OBJECT_NAME+"."+property+"}";
         
+        ELParser parser = new ELParser(new StringReader(expressionString));
+        try
+        {
+            Object expression = parser.ExpressionString();
+            if (!(expression instanceof Expression) && !(expression instanceof ExpressionString))
+                return null;
+
+            Object value = expression instanceof Expression
+                                ? ((Expression) expression).evaluate(this, s_functionMapper, LOGGER)
+                                : ((ExpressionString) expression).evaluate(this, s_functionMapper, LOGGER);
+            return value;
+        }
+        catch (Exception exc)
+        {            
+            log.error("Evaluate:", exc);
+        }
+        
+        return null;
+    }
+    
+    public Object resolveVariable(String pName) throws ELException
+    {
+        if (ROW_OBJECT_NAME.equals(pName))
+            return _model.getRowData();
+
+        FacesContext context = FacesContext.getCurrentInstance();        
+        return context.getApplication().getVariableResolver().resolveVariable(context, pName);
+    }       
+    
     private static final class IntList extends ArrayList implements Cloneable 
     {
         public IntList(int size) 
@@ -310,12 +363,10 @@
     
     private final class Comp implements Comparator 
     {
-        private final PropertyResolver _resolver;
         private final String _prop;
         
-        public Comp(PropertyResolver resolver, String property) 
-        {
-            _resolver = resolver;
+        public Comp(String property) 
+        {            
             _prop = property;
         }
         
@@ -325,12 +376,10 @@
             int index2 = ((Integer) o2).intValue();
             
             _model.setRowIndex(index1);
-            Object instance1 = _model.getRowData();
-            Object value1 = _resolver.getValue(instance1, _prop);
+            Object value1 = getPropertyValue(_prop);
             
             _model.setRowIndex(index2);
-            Object instance2 = _model.getRowData();
-            Object value2 = _resolver.getValue(instance2, _prop);
+            Object value2 = getPropertyValue(_prop);
             
             if (value1 == null)
                 return (value2 == null) ? 0 : -1;
@@ -414,5 +463,5 @@
             throw new UnsupportedOperationException(this.getClass().getName()
                             + " UnsupportedOperationException");
         }
-    };
+    };               
 }

Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/sortheader/HtmlCommandSortHeader.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/sortheader/HtmlCommandSortHeader.java?rev=396904&r1=396903&r2=396904&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/sortheader/HtmlCommandSortHeader.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/sortheader/HtmlCommandSortHeader.java Tue Apr 25 08:56:44 2006
@@ -79,7 +79,7 @@
                 }
             }
         }
-    }
+    }       
 
     public HtmlDataTable findParentDataTable()
     {

Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/sortheader/HtmlSortHeaderRenderer.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/sortheader/HtmlSortHeaderRenderer.java?rev=396904&r1=396903&r2=396904&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/sortheader/HtmlSortHeaderRenderer.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/sortheader/HtmlSortHeaderRenderer.java Tue Apr 25 08:56:44 2006
@@ -16,6 +16,7 @@
 package org.apache.myfaces.custom.sortheader;
 
 import java.io.IOException;
+import java.util.Map;
 
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
@@ -78,7 +79,7 @@
                     ResponseWriter writer = facesContext.getResponseWriter();
                     writer.write((dataTable.isSortAscending()) ? "&#x2191;" : "&#x2193;");
                 }
-            }
+            }            
         }
         super.encodeEnd(facesContext, component);
     }

Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlTableRenderer.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlTableRenderer.java?rev=396904&r1=396903&r2=396904&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlTableRenderer.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlTableRenderer.java Tue Apr 25 08:56:44 2006
@@ -16,6 +16,18 @@
 
 package org.apache.myfaces.renderkit.html.ext;
 
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Hashtable;
+import java.util.Enumeration;
+import java.util.Map;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIData;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
 import org.apache.myfaces.component.html.ext.HtmlDataTable;
 import org.apache.myfaces.custom.column.HtmlColumn;
 import org.apache.myfaces.custom.column.HtmlSimpleColumn;
@@ -409,7 +421,7 @@
         {
             writer.writeAttribute(htmlAttribute, value, null);
         }
-    }
+    }       
 
     /**
      * Render the specified column object using the current row data.
@@ -456,7 +468,7 @@
                                  columnStyleIterator);
             }
             columns.setRowIndex(-1);
-        }
+        }               
     }
 
     /**
@@ -788,5 +800,43 @@
         }
 
         return false;
+    }
+    
+    protected void beforeColumn(FacesContext facesContext, UIData uiData, int columnIndex) throws IOException
+    {        
+        super.beforeColumn(facesContext, uiData, columnIndex);
+        
+        if (uiData instanceof HtmlDataTable)
+        {
+            HtmlDataTable dataTable = (HtmlDataTable)uiData;
+            
+            putSortedReqScopeParam(facesContext, dataTable, columnIndex);
+        }
+    }
+    
+    protected void beforeColumnHeaderOrFooter(FacesContext facesContext, UIData uiData, boolean header, int columnIndex) throws IOException
+    {        
+        super.beforeColumnHeaderOrFooter(facesContext, uiData, header, columnIndex);
+        
+        if (header && uiData instanceof HtmlDataTable)
+        {
+            HtmlDataTable dataTable = (HtmlDataTable)uiData;
+            
+            putSortedReqScopeParam(facesContext, dataTable, columnIndex);
+        }
+    }
+    
+    protected void putSortedReqScopeParam(FacesContext facesContext, HtmlDataTable dataTable, int columnIndex)
+    {
+        String sortedColumnVar = dataTable.getSortedColumnVar();
+        Map requestMap = facesContext.getExternalContext().getRequestMap();
+
+        if (columnIndex == dataTable.getSortColumnIndex())
+        {                
+            if (sortedColumnVar != null)
+                requestMap.put(sortedColumnVar, Boolean.TRUE);
+        }
+        else if (sortedColumnVar != null)
+            requestMap.remove(sortedColumnVar);
     }
 }

Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/taglib/html/ext/HtmlDataTableTag.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/taglib/html/ext/HtmlDataTableTag.java?rev=396904&r1=396903&r2=396904&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/taglib/html/ext/HtmlDataTableTag.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/taglib/html/ext/HtmlDataTableTag.java Tue Apr 25 08:56:44 2006
@@ -54,6 +54,7 @@
     private String _rowIndexVar;
     private String _rowCountVar;
     private String _previousRowDataVar;
+    private String _sortedColumnVar;
     private String _rowOnClick;
     private String _rowOnDblClick;
     private String _rowOnMouseDown;
@@ -89,6 +90,7 @@
         _rowIndexVar=null;
         _rowCountVar=null;
         _previousRowDataVar=null;
+        _sortedColumnVar=null;
         _rowOnClick=null;
         _rowOnDblClick=null;
         _rowOnMouseDown=null;
@@ -125,6 +127,7 @@
         setStringProperty(component, "rowIndexVar", _rowIndexVar);
         setStringProperty(component, "rowCountVar", _rowCountVar);
         setStringProperty(component, "previousRowDataVar", _previousRowDataVar);
+        setStringProperty(component, "sortedColumnVar", _sortedColumnVar);
         setStringProperty(component, "rowOnClick", _rowOnClick);
         setStringProperty(component, "rowOnDblClick", _rowOnDblClick);
         setStringProperty(component, "rowOnMouseDown", _rowOnMouseDown);
@@ -207,6 +210,11 @@
     public void setPreviousRowDataVar(String previousRowDataVar)
     {
         _previousRowDataVar = previousRowDataVar;
+    }
+    
+    public void setSortedColumnVar(String sortedColumnVar)
+    {
+        _sortedColumnVar = sortedColumnVar;
     }
 
     public void setRowOnMouseOver(String rowOnMouseOver)

Modified: myfaces/tomahawk/trunk/core/src/main/tld/entities/extended_data_table_attributes.xml
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/tld/entities/extended_data_table_attributes.xml?rev=396904&r1=396903&r2=396904&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/tld/entities/extended_data_table_attributes.xml (original)
+++ myfaces/tomahawk/trunk/core/src/main/tld/entities/extended_data_table_attributes.xml Tue Apr 25 08:56:44 2006
@@ -131,12 +131,12 @@
             </description>
         </attribute>
         <attribute>
-            <name>currentColumnVar</name>
+            <name>sortedColumnVar</name>
             <required>false</required>
             <rtexprvalue>false</rtexprvalue>
             <description>
                 A parameter name, under which the a boolean is set in request scope
-                similar to the var parameter. TRUE for the column that is currently sorted.
+                similar to the var parameter. TRUE for the column that is currently sorted, FALSE otherwise.
             </description>
         </attribute>
         <attribute>