Author: nbelaevski
Date: 2010-12-27 18:37:21 -0500 (Mon, 27 Dec 2010)
New Revision: 20820
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractCollapsibleSubTable.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractCollapsibleSubTableToggler.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractColumn.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractExtendedDataTable.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractTree.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractTreeNode.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/UIDataTableBase.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/CollapsibleSubTableTogglerRendererBase.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeNodeRendererBase.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRendererBase.java
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRenderingContext.java
trunk/ui/iteration/ui/src/main/resources/META-INF/resources/org.richfaces/collapsible-subtable.js
trunk/ui/iteration/ui/src/main/templates/tree.template.xml
trunk/ui/iteration/ui/src/test/java/org/richfaces/component/UIColumnTest.java
trunk/ui/iteration/ui/src/test/java/org/richfaces/renderkit/ExtendedDataTableRendererTest.java
Log:
https://issues.jboss.org/browse/RF-10098
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractCollapsibleSubTable.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractCollapsibleSubTable.java 2010-12-27
23:26:18 UTC (rev 20819)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractCollapsibleSubTable.java 2010-12-27
23:37:21 UTC (rev 20820)
@@ -78,7 +78,7 @@
getStateHelper().put(PropertyKeys.expanded, expanded);
}
- @Attribute(defaultValue = MODE_CLIENT)
+ @Attribute
public abstract String getExpandMode();
public void broadcast(FacesEvent event) throws AbortProcessingException {
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractCollapsibleSubTableToggler.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractCollapsibleSubTableToggler.java 2010-12-27
23:26:18 UTC (rev 20819)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractCollapsibleSubTableToggler.java 2010-12-27
23:37:21 UTC (rev 20820)
@@ -60,7 +60,7 @@
@Attribute
public abstract String getCollapseIcon();
- @Attribute(defaultValue = DEFAULT_EVENT)
+ @Attribute
public abstract String getEvent();
@Attribute
Modified: trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractColumn.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractColumn.java 2010-12-27
23:26:18 UTC (rev 20819)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractColumn.java 2010-12-27
23:37:21 UTC (rev 20820)
@@ -53,7 +53,7 @@
@Attribute
public abstract boolean isBreakRowBefore();
- @Attribute(defaultValue="SortOrder.unsorted")
+ @Attribute
public abstract SortOrder getSortOrder();
@Attribute
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractExtendedDataTable.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractExtendedDataTable.java 2010-12-27
23:26:18 UTC (rev 20819)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractExtendedDataTable.java 2010-12-27
23:37:21 UTC (rev 20820)
@@ -39,8 +39,8 @@
import org.richfaces.cdk.annotations.Tag;
import org.richfaces.context.ExtendedVisitContext;
import org.richfaces.context.ExtendedVisitContextMode;
+import org.richfaces.log.Logger;
import org.richfaces.log.RichfacesLogger;
-import org.richfaces.log.Logger;
/**
@@ -74,7 +74,7 @@
clientFirst, clientRows
}
- @Attribute(defaultValue = "0")
+ @Attribute
public abstract int getFrozenColumns();
@Attribute(events=@EventName(value="selectionchange", defaultEvent=true))
Modified: trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractTree.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractTree.java 2010-12-27
23:26:18 UTC (rev 20819)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractTree.java 2010-12-27
23:37:21 UTC (rev 20820)
@@ -195,10 +195,10 @@
@Attribute(events = @EventName("beforeselectionchange"))
public abstract String getOnbeforeselectionchange();
- @Attribute(defaultValue = "SwitchType.DEFAULT")
+ @Attribute
public abstract SwitchType getToggleType();
- @Attribute(defaultValue = "SwitchType.client")
+ @Attribute
public abstract SwitchType getSelectionType();
public abstract String getNodeType();
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractTreeNode.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractTreeNode.java 2010-12-27
23:26:18 UTC (rev 20819)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/AbstractTreeNode.java 2010-12-27
23:37:21 UTC (rev 20820)
@@ -84,7 +84,7 @@
return COMPONENT_FAMILY;
}
- @Attribute(defaultValue = "findTreeComponent().isImmediate()")
+ @Attribute
public abstract boolean isImmediate();
public abstract String getType();
@@ -151,7 +151,7 @@
public void queueEvent(FacesEvent event) {
if (this.equals(event.getComponent())) {
if (event instanceof TreeToggleEvent) {
- PhaseId targetPhase = isImmediate() ? PhaseId.APPLY_REQUEST_VALUES :
PhaseId.PROCESS_VALIDATIONS;
+ PhaseId targetPhase = (isImmediate() ||
findTreeComponent().isImmediate()) ? PhaseId.APPLY_REQUEST_VALUES :
PhaseId.PROCESS_VALIDATIONS;
event.setPhaseId(targetPhase);
}
}
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/UIDataTableBase.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/UIDataTableBase.java 2010-12-27
23:26:18 UTC (rev 20819)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/UIDataTableBase.java 2010-12-27
23:37:21 UTC (rev 20820)
@@ -104,7 +104,7 @@
return getFacet(NODATA_FACET_NAME);
}
- @Attribute(defaultValue="Integer.MIN_VALUE")
+ @Attribute
public abstract int getColumns();
@Attribute
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/CollapsibleSubTableTogglerRendererBase.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/CollapsibleSubTableTogglerRendererBase.java 2010-12-27
23:26:18 UTC (rev 20819)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/CollapsibleSubTableTogglerRendererBase.java 2010-12-27
23:37:21 UTC (rev 20820)
@@ -38,6 +38,8 @@
import org.richfaces.component.AbstractCollapsibleSubTableToggler;
import org.richfaces.renderkit.util.RendererUtils;
+import com.google.common.base.Strings;
+
/**
* @author Anton Belevich
*/
@@ -77,12 +79,11 @@
AbstractCollapsibleSubTable subTable = findComponent(context, toggleControl);
if (subTable != null) {
- String switchType = subTable.getExpandMode();
boolean expanded = subTable.isExpanded();
ResponseWriter writer = context.getResponseWriter();
- encodeControl(context, writer, toggleControl, switchType, expanded, false);
- encodeControl(context, writer, toggleControl, switchType, !expanded, true);
+ encodeControl(context, writer, toggleControl, expanded, false);
+ encodeControl(context, writer, toggleControl, !expanded, true);
JSFunction jsFunction = new JSFunction("new
RichFaces.ui.CollapsibleSubTableToggler");
String toggleId = toggleControl.getClientId(context);
@@ -97,7 +98,7 @@
}
protected void encodeControl(FacesContext context, ResponseWriter writer,
AbstractCollapsibleSubTableToggler control,
- String switchType, boolean expanded, boolean visible)
throws IOException {
+ boolean expanded, boolean visible) throws IOException {
String state = getState(expanded);
String styleClass = getStyleClass(context, control);
String style = getStyle(context, control);
@@ -177,6 +178,11 @@
options.put("collapseControl", toggleControlId +
":collapse");
String eventName = toggleControl.getEvent();
+
+ if (Strings.isNullOrEmpty(eventName)) {
+ eventName = AbstractCollapsibleSubTableToggler.DEFAULT_EVENT;
+ }
+
eventName = eventName.trim().startsWith("on") ? eventName.substring(2)
: eventName;
options.put("eventName", eventName);
return options;
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java 2010-12-27
23:26:18 UTC (rev 20819)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java 2010-12-27
23:37:21 UTC (rev 20820)
@@ -145,7 +145,13 @@
for (; iterator.hasNext();) {
columns.add(iterator.next());
}
- int count = Math.min(((Integer)
table.getAttributes().get("frozenColumns")).intValue(), columns.size());
+
+ int frozenColumnsAttribute = (Integer)
table.getAttributes().get("frozenColumns");
+ if (frozenColumnsAttribute < 0) {
+ frozenColumnsAttribute = 0;
+ }
+
+ int count = Math.min(frozenColumnsAttribute, columns.size());
frozenColumns = columns.subList(0, count);
columns = columns.subList(count, columns.size());
parts = new ArrayList<Part>(PartName.values().length);
@@ -808,46 +814,7 @@
}
decodeSortingFiltering(context, component);
-
- /*
- if (map.get(component.getClientId(context)) != null) {
- decodeFiltering(context, component, map.get("rich:filterString"));
- }
- if (map.get(component.getClientId(context)) != null) {
- decodeSorting(context, component, map.get("rich:sortString"));
- } */
}
- /*
- private void updateAttribute(FacesContext context, UIComponent component, String
attribute, Object value) {
- Object oldValue = component.getAttributes().get(attribute);
- if ((oldValue != null && !oldValue.equals(value)) || (oldValue == null
&& value != null)) {
- ELContext elContext = context.getELContext();
- ValueExpression ve = component.getValueExpression(attribute);
- if (ve != null && !ve.isReadOnly(elContext)) {
- component.getAttributes().put(attribute, null);
- try {
- ve.setValue(elContext, value);
- } catch (ELException e) {
- throw new FacesException(e);
- }
- } else {
- component.getAttributes().put(attribute, value);
- }
- }
- }
-
- private void updateSortOrder(FacesContext context, UIComponent component, String
value) {
- SortOrder sortOrder = SortOrder.ascending;
- try {
- sortOrder = SortOrder.valueOf(value);
- } catch (IllegalArgumentException e) {
- // If value isn't name of enum constant of SortOrder, toggle sortOrder of
column.
- if
(SortOrder.ascending.equals(component.getAttributes().get("sortOrder"))) {
- sortOrder = SortOrder.descending;
- }
- }
- updateAttribute(context, component, "sortOrder", sortOrder);
- }*/
private void updateWidthOfColumns(FacesContext context, UIComponent component, String
widthString) {
if (widthString != null && widthString.length() > 0) {
@@ -879,57 +846,7 @@
}
}
}
-
- /*
- private void decodeFiltering(FacesContext context, UIComponent component, String
value) {
- if (value != null && value.length() > 0) {
- String[] values = value.split(":");
- if (Boolean.parseBoolean(values[2])) {
- UIDataTableBase table = (UIDataTableBase) component;
- for (Iterator<UIComponent> iterator = table.columns();
iterator.hasNext();) {
- UIComponent column = iterator.next();
- if (values[0].equals(column.getId())) {
- updateAttribute(context, column, "filterValue",
values[1]);
- } else {
- updateAttribute(context, column, "filterValue", null);
- }
- }
- } else {
- updateAttribute(context, component.findComponent(values[0]),
"filterValue", values[1]);
- }
-
context.getPartialViewContext().getRenderIds().add(component.getClientId(context)); //
TODO Use partial re-rendering here.
- }
- }
- *
- private void decodeSorting(FacesContext context, UIComponent component, String value)
{
- if (value != null && value.length() > 0) {
- UIDataTableBase table = (UIDataTableBase) component;
- List<Object> sortPriority = new LinkedList<Object>();
- String[] values = value.split(":");
- if (Boolean.parseBoolean(values[2]) ||
SortMode.single.equals(table.getSortMode())) {
- for (Iterator<UIComponent> iterator = table.columns();
iterator.hasNext();) {
- UIComponent column = iterator.next();
- if (values[0].equals(column.getId())) {
- updateSortOrder(context, column, values[1]);
- sortPriority.add(values[0]);
- } else {
- updateAttribute(context, column, "sortOrder",
SortOrder.UNSORTED);
- }
- }
- } else {
- updateSortOrder(context, component.findComponent(values[0]), values[1]);
- Collection<?> priority = table.getSortPriority();
- if (priority != null) {
- priority.remove(values[0]);
- sortPriority.addAll(priority);
- }
- sortPriority.add(values[0]);
- }
- updateAttribute(context, component, "sortPriority", sortPriority);
-
context.getPartialViewContext().getRenderIds().add(component.getClientId(context)); //
TODO Use partial re-rendering here.
- }
- } */
-
+
/**
* @deprecated
* TODO Remove this method when width in relative units in columns will be
implemented.
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeNodeRendererBase.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeNodeRendererBase.java 2010-12-27
23:26:18 UTC (rev 20819)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeNodeRendererBase.java 2010-12-27
23:37:21 UTC (rev 20820)
@@ -22,6 +22,7 @@
package org.richfaces.renderkit;
import static org.richfaces.renderkit.RenderKitUtils.getFirstNonEmptyAttribute;
+import static org.richfaces.renderkit.TreeRendererBase.getToggleTypeOrDefault;
import java.io.IOException;
import java.util.Map;
@@ -139,7 +140,7 @@
if (Strings.isNullOrEmpty(iconCollapsed) &&
Strings.isNullOrEmpty(iconExpanded)) {
encodeIconForNodeState(context, tree, treeNode, nodeState, null);
} else {
- SwitchType toggleType = treeNode.findTreeComponent().getToggleType();
+ SwitchType toggleType =
getToggleTypeOrDefault(treeNode.findTreeComponent());
if (toggleType == SwitchType.client || nodeState ==
TreeNodeState.collapsed) {
encodeIconForNodeState(context, tree, treeNode,
TreeNodeState.collapsed, iconCollapsed);
@@ -176,7 +177,7 @@
AbstractTree tree = treeNode.findTreeComponent();
- if (tree.getToggleType() != SwitchType.ajax) {
+ if (getToggleTypeOrDefault(tree) != SwitchType.ajax) {
return null;
}
@@ -191,4 +192,5 @@
return null;
}
+
}
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRendererBase.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRendererBase.java 2010-12-27
23:26:18 UTC (rev 20819)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRendererBase.java 2010-12-27
23:37:21 UTC (rev 20820)
@@ -95,7 +95,7 @@
protected String getAjaxSubmitFunction(FacesContext context, UIComponent component)
{
AbstractTree tree = (AbstractTree) component;
- if (tree.getToggleType() != SwitchType.ajax && tree.getSelectionType() !=
SwitchType.ajax) {
+ if (getToggleTypeOrDefault(tree) != SwitchType.ajax &&
getSelectionTypeOrDefault(tree) != SwitchType.ajax) {
return null;
}
@@ -155,11 +155,11 @@
return component.getClientId(context) + SELECTION_STATE;
}
- protected SwitchType getSelectionMode(FacesContext context, UIComponent component) {
+ protected SwitchType getSelectionType(FacesContext context, UIComponent component) {
AbstractTree tree = (AbstractTree) component;
- SwitchType selectionType = tree.getSelectionType();
- if (selectionType != null && selectionType != SwitchType.ajax &&
selectionType != SwitchType.client) {
+ SwitchType selectionType = getSelectionTypeOrDefault(tree);
+ if (selectionType != SwitchType.ajax && selectionType !=
SwitchType.client) {
//TODO - better message
throw new IllegalArgumentException(String.valueOf(selectionType));
}
@@ -246,4 +246,20 @@
protected void deleteTreeRenderingContext(FacesContext context) {
TreeRenderingContext.delete(context);
}
+
+ static SwitchType getSelectionTypeOrDefault(AbstractTree tree) {
+ SwitchType selectionType = tree.getSelectionType();
+ if (selectionType == null) {
+ selectionType = SwitchType.client;
+ }
+ return selectionType;
+ }
+
+ static SwitchType getToggleTypeOrDefault(AbstractTree tree) {
+ SwitchType toggleType = tree.getToggleType();
+ if (toggleType == null) {
+ toggleType = SwitchType.DEFAULT;
+ }
+ return toggleType;
+ }
}
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRenderingContext.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRenderingContext.java 2010-12-27
23:26:18 UTC (rev 20819)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/renderkit/TreeRenderingContext.java 2010-12-27
23:37:21 UTC (rev 20820)
@@ -22,6 +22,7 @@
package org.richfaces.renderkit;
import static com.google.common.base.Strings.isNullOrEmpty;
+import static org.richfaces.renderkit.TreeRendererBase.getToggleTypeOrDefault;
import java.io.IOException;
import java.util.HashMap;
@@ -179,7 +180,7 @@
String relativeClientId = clientId.substring(baseClientId.length());
- if (tree.getToggleType() != SwitchType.server) {
+ if (getToggleTypeOrDefault(tree) != SwitchType.server) {
String toggleHandler = (String)
RenderKitUtils.getAttributeAndBehaviorsValue(context, treeNode, ONTOGGLE_ATTRIBUTE);
if (!isNullOrEmpty(toggleHandler)) {
getOrCreateHandlers(relativeClientId).setToggleHandler(toggleHandler);
Modified:
trunk/ui/iteration/ui/src/main/resources/META-INF/resources/org.richfaces/collapsible-subtable.js
===================================================================
---
trunk/ui/iteration/ui/src/main/resources/META-INF/resources/org.richfaces/collapsible-subtable.js 2010-12-27
23:26:18 UTC (rev 20819)
+++
trunk/ui/iteration/ui/src/main/resources/META-INF/resources/org.richfaces/collapsible-subtable.js 2010-12-27
23:37:21 UTC (rev 20820)
@@ -6,7 +6,7 @@
this.id = id;
this.stateInput = options.stateInput;
this.optionsInput = options.optionsInput;
- this.expandMode = options.expandMode;
+ this.expandMode = options.expandMode || richfaces.ui.CollapsibleSubTable.MODE_CLNT;
this.eventOptions = options.eventOptions;
this.formId = f;
Modified: trunk/ui/iteration/ui/src/main/templates/tree.template.xml
===================================================================
--- trunk/ui/iteration/ui/src/main/templates/tree.template.xml 2010-12-27 23:26:18 UTC
(rev 20819)
+++ trunk/ui/iteration/ui/src/main/templates/tree.template.xml 2010-12-27 23:37:21 UTC
(rev 20820)
@@ -42,7 +42,7 @@
<script type="text/javascript">
<cdk:scriptObject name="options">
<cdk:scriptOption attributes="toggleType"
defaultValue="SwitchType.DEFAULT" />
- <cdk:scriptOption name="selectionType"
value="#{getSelectionMode(facesContext, component)}"
defaultValue="SwitchType.client" />
+ <cdk:scriptOption name="selectionType"
value="#{getSelectionType(facesContext, component)}"
defaultValue="SwitchType.client" />
<cdk:scriptOption name="ajaxSubmitFunction"
value="#{getAjaxSubmitFunction(facesContext, component)}" />
<cdk:scriptOption attributes="onselectionchange
onbeforeselectionchange toggleNodeEvent" />
<cdk:scriptOption variables="clientEventHandlers" />
Modified: trunk/ui/iteration/ui/src/test/java/org/richfaces/component/UIColumnTest.java
===================================================================
---
trunk/ui/iteration/ui/src/test/java/org/richfaces/component/UIColumnTest.java 2010-12-27
23:26:18 UTC (rev 20819)
+++
trunk/ui/iteration/ui/src/test/java/org/richfaces/component/UIColumnTest.java 2010-12-27
23:37:21 UTC (rev 20820)
@@ -71,7 +71,7 @@
*/
@Test
public final void testSortOrder() {
- Assert.assertEquals(SortOrder.unsorted, column.getSortOrder());
+ Assert.assertNull(column.getSortOrder());
column.setSortOrder(SortOrder.ascending);
Assert.assertEquals(SortOrder.ascending, column.getSortOrder());
environment.replay();
Modified:
trunk/ui/iteration/ui/src/test/java/org/richfaces/renderkit/ExtendedDataTableRendererTest.java
===================================================================
---
trunk/ui/iteration/ui/src/test/java/org/richfaces/renderkit/ExtendedDataTableRendererTest.java 2010-12-27
23:26:18 UTC (rev 20819)
+++
trunk/ui/iteration/ui/src/test/java/org/richfaces/renderkit/ExtendedDataTableRendererTest.java 2010-12-27
23:37:21 UTC (rev 20820)
@@ -287,7 +287,7 @@
Map<String, Object> column1Attributes =
component.findComponent("column1").getAttributes();
Map<String, Object> column2Attributes =
component.findComponent("column2").getAttributes();
String clientId = component.getClientId(facesContext);
- assertEquals(SortOrder.unsorted, column1Attributes.get("sortOrder"));
+ assertNull(column1Attributes.get("sortOrder"));
assertEquals(SortOrder.ascending, column2Attributes.get("sortOrder"));
facesRequest.withParameter(clientId, clientId);
facesRequest.withParameter(clientId + "rich:sorting",
"column1:null:null");
@@ -308,7 +308,7 @@
Map<String, Object> column1Attributes =
component.findComponent("column1").getAttributes();
Map<String, Object> column2Attributes =
component.findComponent("column2").getAttributes();
String clientId = component.getClientId(facesContext);
- assertEquals(SortOrder.unsorted, column1Attributes.get("sortOrder"));
+ assertNull(column1Attributes.get("sortOrder"));
assertEquals(SortOrder.ascending, column2Attributes.get("sortOrder"));
facesRequest.withParameter(clientId, clientId);
facesRequest.withParameter(clientId + "rich:sorting",
"column1:descending:true");