Author: lfryc(a)redhat.com
Date: 2010-11-30 11:17:53 -0500 (Tue, 30 Nov 2010)
New Revision: 20236
Added:
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/facets.xhtml
Modified:
modules/tests/metamer/trunk/application/pom.xml
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/Attribute.java
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/bean/RichDataTableBean.java
modules/tests/metamer/trunk/application/src/main/resources/org/richfaces/tests/metamer/bean/RichDataTableBean.properties
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/list.xhtml
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/scroller.xhtml
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/simple.xhtml
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/sorting-using-column.xhtml
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/sorting-using-component-control.xhtml
Log:
rich:dataTable - pre-automating component preparation (RFPL-912)
Modified: modules/tests/metamer/trunk/application/pom.xml
===================================================================
--- modules/tests/metamer/trunk/application/pom.xml 2010-11-30 14:37:17 UTC (rev 20235)
+++ modules/tests/metamer/trunk/application/pom.xml 2010-11-30 16:17:53 UTC (rev 20236)
@@ -82,6 +82,12 @@
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.5</version>
+ </dependency>
<dependency>
<groupId>org.slf4j</groupId>
Modified:
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/Attribute.java
===================================================================
---
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/Attribute.java 2010-11-30
14:37:17 UTC (rev 20235)
+++
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/Attribute.java 2010-11-30
16:17:53 UTC (rev 20236)
@@ -22,6 +22,8 @@
package org.richfaces.tests.metamer;
import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.List;
import javax.faces.model.SelectItem;
@@ -29,6 +31,7 @@
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -73,6 +76,12 @@
}
public void setValue(Object value) {
+ if (value instanceof String) {
+ if (type == Collection.class) {
+ String[] splitted = StringUtils.split((String) value, ",[]");
+ value = Arrays.asList(splitted);
+ }
+ }
this.value = value;
}
Modified:
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/bean/RichDataTableBean.java
===================================================================
---
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/bean/RichDataTableBean.java 2010-11-30
14:37:17 UTC (rev 20235)
+++
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/bean/RichDataTableBean.java 2010-11-30
16:17:53 UTC (rev 20236)
@@ -22,9 +22,12 @@
package org.richfaces.tests.metamer.bean;
import java.io.Serializable;
+import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
+import java.util.Map.Entry;
+
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
@@ -67,6 +70,8 @@
private String titleFilter;
private int kidsFilter;
private int kidsFilter2;
+ // facets
+ private Map<String, String> facets = new HashMap<String, String>();
/**
* Initializes the managed bean.
@@ -80,19 +85,45 @@
attributes.setAttribute("rendered", true);
attributes.setAttribute("rows", 10);
-
+ attributes.get("sortPriority").setType(Collection.class);
+
+ // hidden attributes
+ attributes.remove("filteringListeners");
+ attributes.remove("sortingListeners");
+ attributes.remove("filterVar");
+ attributes.remove("iterationState");
+ attributes.remove("iterationStatusVar");
+ attributes.remove("rowAvailable");
+ attributes.remove("rowCount");
+ attributes.remove("rowData");
+ attributes.remove("rowIndex");
+ attributes.remove("rowKey");
+ attributes.remove("rowKeyConverter");
+ attributes.remove("relativeRowIndex");
+
// TODO these must be tested in other way
attributes.remove("componentState");
attributes.remove("rowKeyVar");
attributes.remove("stateVar");
+ attributes.remove("selection");
attributes.remove("var");
attributes.remove("value");
+ attributes.remove("keepSaved");
// TODO can be these set as attributes or only as facets?
attributes.remove("caption");
attributes.remove("header");
attributes.remove("footer");
attributes.remove("noData");
+
+ // facets initial values
+ facets.put("noData", "There is no data.");
+ facets.put("caption", "Caption");
+ facets.put("header", "Header");
+ facets.put("columnStateHeader", "State Header");
+ facets.put("columnStateFooter", "State Footer");
+ facets.put("columnCapitalHeader", "Capital Header");
+ facets.put("columnCapitalFooter", "Capital Footer");
}
public Attributes getAttributes() {
@@ -212,6 +243,11 @@
setStatesOrder(SortOrder.ascending);
}
}
+
+ public void sortReset() {
+ setStatesOrder(SortOrder.ascending);
+ setCapitalsOrder(SortOrder.unsorted);
+ }
public Filter<?> getFilterSexImpl() {
return new Filter<Employee>() {
@@ -238,8 +274,8 @@
}
};
}
-
- public void sortingListener(SortingEvent event) {
- System.out.println(event.getSortOrder());
+
+ public Map<String, String> getFacets() {
+ return facets;
}
}
Modified:
modules/tests/metamer/trunk/application/src/main/resources/org/richfaces/tests/metamer/bean/RichDataTableBean.properties
===================================================================
---
modules/tests/metamer/trunk/application/src/main/resources/org/richfaces/tests/metamer/bean/RichDataTableBean.properties 2010-11-30
14:37:17 UTC (rev 20235)
+++
modules/tests/metamer/trunk/application/src/main/resources/org/richfaces/tests/metamer/bean/RichDataTableBean.properties 2010-11-30
16:17:53 UTC (rev 20236)
@@ -0,0 +1,2 @@
+attr.sortMode.single=single
+attr.sortMode.multi=multi
\ No newline at end of file
Copied:
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/facets.xhtml
(from rev 20207,
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/simple.xhtml)
===================================================================
---
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/facets.xhtml
(rev 0)
+++
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/facets.xhtml 2010-11-30
16:17:53 UTC (rev 20236)
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
+
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a4j="http://richfaces.org/a4j"
+
xmlns:metamer="http://java.sun.com/jsf/composite/metamer"
xmlns:rich="http://richfaces.org/rich">
+
+ <!--
+JBoss, Home of Professional Open Source
+Copyright 2010, Red Hat, Inc. and individual contributors
+by the @authors tag. See the copyright.txt in the distribution for a
+full listing of individual contributors.
+
+This is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License as
+published by the Free Software Foundation; either version 2.1 of
+the License, or (at your option) any later version.
+
+This software is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this software; if not, write to the Free
+Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ -->
+
+ <ui:composition template="/templates/template.xhtml">
+
+ <ui:define name="head">
+ <f:metadata>
+ <f:viewParam name="templates"
value="#{templateBean.templates}">
+ <f:converter converterId="templatesListConverter" />
+ </f:viewParam>
+ </f:metadata>
+ <h:outputStylesheet library="css"
name="richDataTable.css"/>
+ </ui:define>
+
+ <ui:define name="outOfTemplateBefore">
+ <br/>
+ <h:outputText value="Show data in table: " />
+ <h:selectBooleanCheckbox id="noDataCheckbox"
value="#{richDataTableBean.state}">
+ <a4j:ajax render="richDataTable scroller1"/>
+ </h:selectBooleanCheckbox>
+ <br/><br/>
+ </ui:define>
+
+ <ui:define name="component">
+
+ <rich:dataTable id="richDataTable"
+
first="#{richDataTableBean.attributes['first'].value}"
+
keepSaved="#{richDataTableBean.attributes['keepSaved'].value}"
+
noDataLabel="#{richDataTableBean.attributes['noDataLabel'].value}"
+
rendered="#{richDataTableBean.attributes['rendered'].value}"
+
rows="#{richDataTableBean.attributes['rows'].value}"
+
sortMode="#{richDataTableBean.attributes['sortMode'].value}"
+
sortPriority="#{richDataTableBean.attributes['sortPriority'].value}"
+ value="#{richDataTableBean.state ? model.capitals :
null}"
+ var="record"
+ >
+
+ <f:facet name="noData">
+ <h:outputText id="noData"
value="#{richDataTableBean.facets['noData']}" style="color:
red;"
+ rendered="#{not empty
richDataTableBean.facets['noData']}"/>
+ </f:facet>
+
+ <f:facet name="caption">
+ <h:outputText id="caption"
value="#{richDataTableBean.facets['caption']}"
+ rendered="#{not empty
richDataTableBean.facets['caption']}"/>
+ </f:facet>
+
+ <f:facet name="header">
+ <h:outputText id="header"
value="#{richDataTableBean.facets['header']}"
+ rendered="#{not empty
richDataTableBean.facets['header']}" />
+ </f:facet>
+
+ <rich:column id="columnState"
sortBy="#{record.state}">
+ <f:facet name="header">
+ <h:outputText id="columnHeaderState"
value="#{richDataTableBean.facets['columnStateHeader']}"
+ rendered="#{not empty
richDataTableBean.facets['columnStateHeader']}"/>
+ </f:facet>
+
+ <h:outputText value="#{record.state}" />
+ <f:facet name="footer">
+ <h:outputText id="columnFooterState"
value="#{richDataTableBean.facets['columnStateFooter']}"
+ rendered="#{not empty
richDataTableBean.facets['columnStateFooter']}"/>
+ </f:facet>
+ </rich:column>
+
+ <rich:column id="columnCapital"
sortBy="#{record.name}">
+ <f:facet name="header">
+ <h:outputText id="columnHeaderCapital"
value="#{richDataTableBean.facets['columnCapitalHeader']}"
+ rendered="#{not empty
richDataTableBean.facets['columnCapitalHeader']}"/>
+ </f:facet>
+
+ <h:outputText value="#{record.name}" />
+ <f:facet name="footer">
+ <h:outputText id="columnFooterCapital"
value="#{richDataTableBean.facets['columnCapitalFooter']}"
+ rendered="#{not empty
richDataTableBean.facets['columnCapitalFooter']}"/>
+ </f:facet>
+ </rich:column>
+
+ </rich:dataTable>
+ </ui:define>
+
+ <ui:define name="outOfTemplateAfter">
+
+ <a4j:ajax render="richDataTable">
+ <h:panelGrid columns="2">
+ <h:outputLabel value="No Data Facet: " />
+ <h:inputText id="noDataInput"
value="#{richDataTableBean.facets['noData']}" />
+
+ <h:outputLabel value="Caption Facet: " />
+ <h:inputText id="captionInput"
value="#{richDataTableBean.facets['caption']}" />
+
+ <h:outputLabel value="Header Facet:" />
+ <h:inputText id="headerInput"
value="#{richDataTableBean.facets['header']}" />
+
+ <h:outputLabel value="State Column Header:" />
+ <h:inputText id="columnStateHeaderInput"
value="#{richDataTableBean.facets['columnStateHeader']}" />
+
+ <h:outputLabel value="State Column Footer:" />
+ <h:inputText id="columnStateFooterInput"
value="#{richDataTableBean.facets['columnStateFooter']}" />
+
+ <h:outputLabel value="Capital Column Header:" />
+ <h:inputText id="columnCapitalHeaderInput"
value="#{richDataTableBean.facets['columnCapitalHeader']}" />
+
+ <h:outputLabel value="Capital Column Footer:" />
+ <h:inputText id="columnCapitalFooterInput"
value="#{richDataTableBean.facets['columnCapitalFooter']}" />
+ </h:panelGrid>
+ </a4j:ajax>
+
+ <br/><br/>
+
+ <metamer:attributes value="#{richDataTableBean.attributes}"
id="attributes" />
+ </ui:define>
+
+ </ui:composition>
+</html>
\ No newline at end of file
Modified:
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/list.xhtml
===================================================================
---
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/list.xhtml 2010-11-30
14:37:17 UTC (rev 20235)
+++
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/list.xhtml 2010-11-30
16:17:53 UTC (rev 20236)
@@ -34,6 +34,10 @@
<metamer:testPageLink id="simple" outcome="simple"
value="Simple">
Simple page that contains <b>rich:dataTable</b> (with model
containing capitals) and input boxes for all its attributes.
</metamer:testPageLink>
+
+ <metamer:testPageLink id="facets" outcome="facets"
value="Facets">
+ Simple page that contains <b>rich:dataTable</b> (with model
containing capitals) and input boxes for all its attributes.
+ </metamer:testPageLink>
<metamer:testPageLink id="scroller" outcome="scroller"
value="Data Scroller">
Page that contains <b>rich:dataTable</b> (with model
containing capitals), data scroller and input boxes for all its attributes.
@@ -57,7 +61,7 @@
<b>rich:dataTable</b> (with model containing states and
capitals) custom sorting by <b>rich:column</b>'s attribute @sortBy,
@sortOrder.
</metamer:testPageLink>
- <metamer:testPageLink id="filtering"
outcome="filtering" value="Table filtering">
+ <metamer:testPageLink id="filtering"
outcome="filtering" value="Table Filtering">
Page that contains filterable <b>rich:dataTable</b> (with
model containing capitals) and input boxes for all its attributes.
</metamer:testPageLink>
Modified:
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/scroller.xhtml
===================================================================
---
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/scroller.xhtml 2010-11-30
14:37:17 UTC (rev 20235)
+++
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/scroller.xhtml 2010-11-30
16:17:53 UTC (rev 20236)
@@ -115,18 +115,7 @@
</ui:define>
<ui:define name="outOfTemplateAfter">
- <h:commandButton id="sortStatesButton" value="sort
state">
- <rich:componentControl event="click"
target="richDataTable" operation="sort"/>
- </h:commandButton>
- <h:commandButton id="sortCapitalsButton" value="sort
capital">
- <rich:componentControl event="click"
target="richDataTable" operation="sort">
- <f:param value="columnCapital" />
- </rich:componentControl>
- </h:commandButton>
-
- <br/><br/>
-
<fieldset>
<legend>scroller1</legend>
Modified:
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/simple.xhtml
===================================================================
---
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/simple.xhtml 2010-11-30
14:37:17 UTC (rev 20235)
+++
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/simple.xhtml 2010-11-30
16:17:53 UTC (rev 20236)
@@ -49,88 +49,30 @@
<ui:define name="component">
<rich:dataTable id="richDataTable"
-
filterVar="#{richDataTableBean.attributes['filterVar'].value}"
-
filteringListeners="#{richDataTableBean.attributes['filteringListeners'].value}"
first="#{richDataTableBean.attributes['first'].value}"
-
iterationState="#{richDataTableBean.attributes['iterationState'].value}"
-
iterationStatusVar="#{richDataTableBean.attributes['iterationStatusVar'].value}"
keepSaved="#{richDataTableBean.attributes['keepSaved'].value}"
noDataLabel="#{richDataTableBean.attributes['noDataLabel'].value}"
-
relativeRowIndex="#{richDataTableBean.attributes['relativeRowIndex'].value}"
rendered="#{richDataTableBean.attributes['rendered'].value}"
-
rowAvailable="#{richDataTableBean.attributes['rowAvailable'].value}"
-
rowCount="#{richDataTableBean.attributes['rowCount'].value}"
-
rowData="#{richDataTableBean.attributes['rowData'].value}"
-
rowIndex="#{richDataTableBean.attributes['rowIndex'].value}"
-
rowKey="#{richDataTableBean.attributes['rowKey'].value}"
-
rowKeyConverter="#{richDataTableBean.attributes['rowKeyConverter'].value}"
rows="#{richDataTableBean.attributes['rows'].value}"
sortMode="#{richDataTableBean.attributes['sortMode'].value}"
sortPriority="#{richDataTableBean.attributes['sortPriority'].value}"
-
sortingListeners="#{richDataTableBean.attributes['sortingListeners'].value}"
value="#{richDataTableBean.state ? model.capitals :
null}"
var="record"
- <f:facet name="noData">
- <h:outputText value="There is no data."
style="color: red;"/>
- </f:facet>
-
- <f:facet name="caption">
- <h:outputText id="captionFacet" value="Caption
Facet" />
- </f:facet>
-
- <f:facet name="header">
- <h:outputText value="Header Facet" />
- </f:facet>
-
<rich:column id="columnState"
sortBy="#{record.state}">
- <f:facet name="header">
- <h:outputText id="columnHeaderState"
value="State Header" />
- </f:facet>
-
<h:outputText value="#{record.state}" />
- <f:facet name="footer">
- <h:outputText id="columnFooterState"
value="State Footer" />
- </f:facet>
</rich:column>
<rich:column id="columnCapital"
sortBy="#{record.name}">
- <f:facet name="header">
- <h:outputText id="columnHeaderCapital"
value="Capital Header" />
- </f:facet>
-
<h:outputText value="#{record.name}" />
- <f:facet name="footer">
- <h:outputText id="columnFooterCapital"
value="Capital Footer" />
- </f:facet>
</rich:column>
</rich:dataTable>
</ui:define>
<ui:define name="outOfTemplateAfter">
-
- <h:commandButton id="sortStatesButton" value="sort
states">
- <rich:componentControl event="click"
target="richDataTable" operation="sort">
- <f:param value="columnState" />
- </rich:componentControl>
- </h:commandButton>
- <h:commandButton id="sortCapitalsButton" value="sort
capitals">
- <rich:componentControl event="click"
target="richDataTable" operation="sort">
- <f:param value="columnCapital" />
- </rich:componentControl>
- </h:commandButton>
-
- <br/><br/>
-
- <h:commandButton id="sortTableButton" value="sort table">
- <rich:componentControl event="click"
target="richDataTable" operation="sort" />
- </h:commandButton>
-
- <br/><br/>
-
<metamer:attributes value="#{richDataTableBean.attributes}"
id="attributes" />
</ui:define>
Modified:
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/sorting-using-column.xhtml
===================================================================
---
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/sorting-using-column.xhtml 2010-11-30
14:37:17 UTC (rev 20235)
+++
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/sorting-using-column.xhtml 2010-11-30
16:17:53 UTC (rev 20236)
@@ -79,7 +79,7 @@
<rich:column id="columnState"
sortBy="#{record.state}"
sortOrder="#{richDataTableBean.statesOrder}">
<f:facet name="header">
- <a4j:commandLink id="columnHeaderState"
value="State" render="richDataTable"
action="#{richDataTableBean.sortByStates}"/>
+ <a4j:commandLink id="sortStates"
value="State" render="richDataTable"
action="#{richDataTableBean.sortByStates}"/>
</f:facet>
<h:outputText value="#{record.state}" />
@@ -90,7 +90,7 @@
<rich:column id="columnCapital"
sortBy="#{record.name}" sortOrder="#{richDataTableBean.capitalsOrder}"
sortingListeners="#{richDataTableBean.sortingListener}">
<f:facet name="header">
- <a4j:commandLink id="columnHeaderCapital"
value="Capital" render="richDataTable"
action="#{richDataTableBean.sortByCapitals}"/>
+ <a4j:commandLink id="sortCapitals"
value="Capital" render="richDataTable"
action="#{richDataTableBean.sortByCapitals}"/>
</f:facet>
<h:outputText value="#{record.name}" />
@@ -104,6 +104,9 @@
</f:facet>
</rich:dataTable>
+
+ <a4j:commandButton id="sortReset" value="Reset
Sorting" render="richDataTable"
action="#{richDataTableBean.sortReset}"/>
+
</ui:define>
<ui:define name="outOfTemplateAfter">
Modified:
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/sorting-using-component-control.xhtml
===================================================================
---
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/sorting-using-component-control.xhtml 2010-11-30
14:37:17 UTC (rev 20235)
+++
modules/tests/metamer/trunk/application/src/main/webapp/components/richDataTable/sorting-using-component-control.xhtml 2010-11-30
16:17:53 UTC (rev 20236)
@@ -79,7 +79,11 @@
<rich:column id="columnState"
sortBy="#{record.state}"
sortOrder="#{richDataTableBean.statesOrder}">
<f:facet name="header">
- State
+ <h:commandLink id="sortStates"
value="State">
+ <rich:componentControl event="click"
target="richDataTable" operation="sort">
+ <f:param value="columnState" />
+ </rich:componentControl>
+ </h:commandLink>
</f:facet>
<h:outputText value="#{record.state}" />
@@ -90,7 +94,11 @@
<rich:column id="columnCapital"
sortBy="#{record.name}"
sortOrder="#{richDataTableBean.capitalsOrder}">
<f:facet name="header">
- Capital
+ <h:commandLink id="sortCapitals"
value="Capital">
+ <rich:componentControl event="click"
target="richDataTable" operation="sort">
+ <f:param value="columnCapital" />
+ </rich:componentControl>
+ </h:commandLink>
</f:facet>
<h:outputText value="#{record.name}" />
@@ -104,29 +112,13 @@
</f:facet>
</rich:dataTable>
- </ui:define>
-
- <ui:define name="outOfTemplateAfter">
- <h:commandButton id="sortStatesButton" value="sort
state">
- <rich:componentControl event="click"
target="richDataTable" operation="sort">
- <f:param value="columnState" />
- </rich:componentControl>
- </h:commandButton>
-
- <h:commandButton id="sortCapitalsButton" value="sort
capital">
- <rich:componentControl event="click"
target="richDataTable" operation="sort">
- <f:param value="columnCapital" />
- </rich:componentControl>
- </h:commandButton>
-
- <br/><br/>
- <h:commandButton id="sortTableButton" value="sort
table">
+ <h:commandButton id="sortReset" value="Reset
Sorting">
<rich:componentControl event="click"
target="richDataTable" operation="sort" />
</h:commandButton>
+ </ui:define>
- <br/><br/>
-
+ <ui:define name="outOfTemplateAfter">
<metamer:attributes value="#{richDataTableBean.attributes}"
id="attributes" />
</ui:define>