[richfaces-svn-commits] JBoss Rich Faces SVN: r6069 - in trunk/ui/dataTable/src/main/java/org/richfaces: renderkit and 1 other directory.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Wed Feb 13 13:40:44 EST 2008


Author: konstantin.mishin
Date: 2008-02-13 13:40:44 -0500 (Wed, 13 Feb 2008)
New Revision: 6069

Modified:
   trunk/ui/dataTable/src/main/java/org/richfaces/component/UIDataTable.java
   trunk/ui/dataTable/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java
Log:
RF-1741

Modified: trunk/ui/dataTable/src/main/java/org/richfaces/component/UIDataTable.java
===================================================================
--- trunk/ui/dataTable/src/main/java/org/richfaces/component/UIDataTable.java	2008-02-13 18:37:42 UTC (rev 6068)
+++ trunk/ui/dataTable/src/main/java/org/richfaces/component/UIDataTable.java	2008-02-13 18:40:44 UTC (rev 6069)
@@ -166,8 +166,6 @@
 
 	@Override
 	protected ExtendedDataModel createDataModel() {
-		ExpressionFactory factory = FacesContext.getCurrentInstance().getApplication().getExpressionFactory();
-		ELContext context = FacesContext.getCurrentInstance().getELContext();
 		List<FilterField> filterFields = new LinkedList<FilterField>();
 		List<SortField2> sortFields = new LinkedList<SortField2>();
 		List<UIComponent> list = getChildren();

Modified: trunk/ui/dataTable/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java
===================================================================
--- trunk/ui/dataTable/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java	2008-02-13 18:37:42 UTC (rev 6068)
+++ trunk/ui/dataTable/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java	2008-02-13 18:40:44 UTC (rev 6069)
@@ -41,6 +41,7 @@
 import org.richfaces.component.Column;
 import org.richfaces.component.Row;
 import org.richfaces.component.UIDataTable;
+import org.richfaces.model.Ordering;
 
 /**
  * @author shura
@@ -48,7 +49,7 @@
  */
 public abstract class AbstractTableRenderer extends AbstractRowsRenderer {
 
-	private static final String FILTER_PARAMETER_VALUE = "f";
+	private static final String SORT_FILTER_PARAMETER = "fsp";
 	
 	/**
 	 * Encode all table structure - colgroups definitions, caption, header,
@@ -167,6 +168,31 @@
 					(org.richfaces.component.UIColumn) column;
 				String clientId = col.getClientId(context) + facetName;
 				writer.writeAttribute("id", clientId, null);
+				if (column.getValueExpression("comparator") != null
+						|| column.getValueExpression("sortExpression") != null) {
+					UIComponent table = column.getParent();
+					String id = table.getClientId(context);
+					JSFunction ajaxFunction = AjaxRendererUtils
+							.buildAjaxFunction(table, context);
+					Map eventOptions = AjaxRendererUtils.buildEventOptions(
+							context, table);
+					Map parameters = (Map) eventOptions.get("parameters");
+					parameters.put(id, SORT_FILTER_PARAMETER);
+					parameters.put(SORT_FILTER_PARAMETER, column
+							.getClientId(context));
+					ajaxFunction.addParameter(eventOptions);
+					StringBuffer buffer = new StringBuffer();
+					ajaxFunction.appendScript(buffer);
+					writer.writeAttribute(HTML.onclick_ATTRIBUTE, buffer
+							.toString(), null);
+					if (Ordering.ASCENDING.equals(col.getSortOrder())) {
+						writer.writeAttribute(HTML.style_ATTRIBUTE,
+								"background-color: red", null);
+					} else if (Ordering.DESCENDING.equals(col.getSortOrder())) {
+						writer.writeAttribute(HTML.style_ATTRIBUTE,
+								"background-color: green", null);
+					}
+				}
 			}
 
 			UIComponent facet = column.getFacet(facetName);
@@ -182,13 +208,13 @@
 				JSFunction ajaxFunction = AjaxRendererUtils.buildAjaxFunction(table, context);
 				Map eventOptions = AjaxRendererUtils.buildEventOptions(context, table);
 				Map parameters = (Map) eventOptions.get("parameters");
-				parameters.put(id, FILTER_PARAMETER_VALUE);
+				parameters.put(id, SORT_FILTER_PARAMETER);
 				ajaxFunction.addParameter(eventOptions);
 				StringBuffer buffer = new StringBuffer();
 				ajaxFunction.appendScript(buffer);
 				writer.startElement(HTML.INPUT_ELEM, column);
 				writer.writeAttribute(HTML.TYPE_ATTR, "text", null);
-				writer.writeAttribute(HTML.NAME_ATTRIBUTE, column.getClientId(context) + FILTER_PARAMETER_VALUE, null);
+				writer.writeAttribute(HTML.NAME_ATTRIBUTE, column.getClientId(context) + SORT_FILTER_PARAMETER, null);
 				writer.writeAttribute(HTML.value_ATTRIBUTE, column.getAttributes().get("filterValue"), null);
 				writer.writeAttribute(HTML.onchange_ATTRIBUTE, buffer.toString(), null);
 				writer.endElement(HTML.INPUT_ELEM);				
@@ -455,14 +481,24 @@
 	@Override
 	protected void doDecode(FacesContext context, UIComponent component) {
 		Map<String, String> map = context.getExternalContext().getRequestParameterMap();
-		if (FILTER_PARAMETER_VALUE.equals(map.get(component.getClientId(context)))) {
+		if (SORT_FILTER_PARAMETER.equals(map.get(component.getClientId(context)))) {
+			String id = map.get(SORT_FILTER_PARAMETER);
 			List<UIComponent> list = component.getChildren();
 			for (Iterator<UIComponent> iterator = list.iterator(); iterator
 					.hasNext();) {
 				UIComponent children = iterator.next();
-				if (children instanceof org.richfaces.component.UIColumn) {
+				if (children instanceof Column) {
+					Column column = (Column) children;
+					children.setId(children.getId());
+					if(children.getClientId(context).equals(id)) {
+						if(Ordering.ASCENDING.equals(column.getSortOrder())) {
+							column.setSortOrder(Ordering.DESCENDING);
+						} else {
+							column.setSortOrder(Ordering.ASCENDING);							
+						}
+					}
 					children.getAttributes().put("filterValue",
-							map.get(children.getClientId(context) + FILTER_PARAMETER_VALUE));
+							map.get(children.getClientId(context) + SORT_FILTER_PARAMETER));
 				}
 
 			}




More information about the richfaces-svn-commits mailing list