The JSP code fragment provided in this section can be used to build a sortable table from any collection of objects. This code example includes all of the functionality described in each of the previous sections about TableInfo.
<%-- Include this fragment to generate a sortable table. --%>
<%-- tableItems is the array of collection of items to display. --%>
<%-- tableInfo is the TableInfo object that describes the columns. --%>
<%-- tablePage is the jsp that contains the table. --%>
<%@ taglib uri="http://www.atg.com/taglibs/daf/dspjspTaglib1_0" prefix="dsp" %>
<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c' %>
<dsp:page>
<HTML>
<BODY>
<dsp:importbean bean="/atg/dynamo/droplet/ForEach"/>
<dsp:importbean bean="/atg/dynamo/droplet/Format"/>
<dsp:importbean bean="/atg/dynamo/droplet/IsNull"/>
<dsp:importbean bean="/atg/dynamo/droplet/Switch"/>
<%--
Handle updating sort directives if you were passed a sortColumn parameter
and an optional sort direction in a sortDir parameter.
--%>
<dsp:droplet name="IsNull">
<dsp:param name="value" param="sortColumn"/>
<%-- If you don't have a sortColumn parameter, reset the sort info --%>
<dsp:oparam name="true">
<dsp:setvalue param="tableInfo.reset" value="${null}"/>
</dsp:oparam>
<%-- If you have a sortColumn parameter, it will be the index of a --%>
<%-- column in the TableInfo object. Set its sort direction now. --%>
<dsp:oparam name="false">
<%-- Look to see if you got the optional sortDir parameter too. --%>
<%-- If so, use it, else default to cycle_up_if_primary. --%>
<dsp:droplet name="IsNull">
<dsp:param name="value" param="sortDir"/>
<dsp:oparam name="true">
<dsp:setvalue
param="tableInfo.tableColumns[param:sortColumn].sortDirection"
value="cycle_up_if_primary"/>
</dsp:oparam>
<dsp:oparam name="false">
<dsp:setvalue
param="tableInfo.tableColumns[param:sortColumn].sortDirection"
paramvalue="sortDir"/>
</dsp:oparam>
</dsp:droplet>
</dsp:oparam>
</dsp:droplet>
<%--
Now you've dealt with the case where you got to this page by clicking on a
column heading to re-sort and redisplay the table, so you can go ahead and build
the table display using the updated sort parameters.
--%>
<dsp:droplet name="ForEach">
<dsp:param param="tableItems" name="array"/>
<dsp:param name="sortProperties" param="tableInfo.sortString"/>
<dsp:oparam name="empty">
There are no items in your list.
</dsp:oparam>
<%-- Generate column headings. Each heading is a link. Clicking --%>
<%-- on the link makes that column the primary sort column, cycling --%>
<%-- through sort directions if it was already the primary sort --%>
<%—column. --%>
<dsp:oparam name="outputStart">
<TABLE border=1 cellspacing=2 cellpadding=2>
<TR>
<dsp:droplet name="ForEach">
<dsp:param name="array" param="tableInfo.tableColumns"/>
<dsp:param name="sortProperties" value=""/>
<dsp:oparam name="output">
<%-- Extract useful properties from the current Column descriptor. --%>
<dsp:setvalue paramvalue="element.heading" param="columnHeading"/>
<dsp:setvalue paramvalue="element.sortPosition" param="sortPosition"/>
<dsp:setvalue paramvalue="element.sortDirection" param="sortDirection"/>
<TD align="center"><B>
<dsp:getvalueof var="a92" param="tablePage"
vartype="java.lang.String">
<dsp:a href="${a92}">
<dsp:param name="sortColumn" param="index"/>
<%-- If the current column is the primary sort column, --%>
<%-- you want to display + or - as a directional indicator to show --%>
<%-- the sort direction for that column. --%>
<dsp:droplet name="Switch">
<dsp:param name="value" param="sortPosition"/>
<%-- Primary sort column gets special treatment --%>
<dsp:oparam name="1">
<dsp:droplet name="Switch">
<dsp:param name="value" param="sortDirection"/>
<dsp:oparam name="ascending">
<dsp:valueof param="columnHeading"/> [+]
</dsp:oparam>
<dsp:oparam name="descending">
<dsp:valueof param="columnHeading"/> [-]
</dsp:oparam>
<dsp:oparam name="null">
<dsp:valueof param="columnHeading"/>
</dsp:oparam>
</dsp:droplet>
</dsp:oparam>
<%-- Others just display the column name --%>
<dsp:oparam name="default">
<dsp:valueof param="columnHeading"/>
</dsp:oparam>
</dsp:droplet>
</dsp:a>
</dsp:getvalueof>
</TD>
</dsp:oparam>
</dsp:droplet>
</TR>
</dsp:oparam>
<%-- Generate a row per item --%>
<dsp:oparam name="output">
<dsp:setvalue paramvalue="element" param="currentItem"/>
<TR>
<%-- Here you are going to iterate over all of the property names
you want to display in this row, using the bean Property
servlet bean to display each value.
--%>
<dsp:droplet name="ForEach">
<dsp:param name="array" param="tableInfo.tableColumns"/>
<dsp:param name="sortProperties" value=""/>
<dsp:oparam name="output">
<TD>
<dsp:droplet name="BeanProperty">
<dsp:param name="bean" param="currentItem"/>
<dsp:param name="propertyName" param="element.property"/>
<dsp:oparam name="output">
<dsp:valueof param="propertyValue"/>
</dsp:oparam>
</dsp:droplet>
</TD>
</dsp:oparam>
</dsp:droplet>
</TR>
</dsp:oparam>
<%-- Close the table --%>
<dsp:oparam name="outputEnd">
</TABLE>
<p>
<dsp:getvalueof var="a197" param="tablePage" vartype="java.lang.String">
<dsp:a href="${a197}">Reset sort properties</dsp:a>
</dsp:getvalueof>
</dsp:oparam>
</dsp:droplet>
</BODY>
</HTML>
</dsp:page>
