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));
}
}