Nothing exists in the taglibs or Struts itself to do this as far as I know, so you'll 
have to roll your own.

I have done this in a number of applications, so I'll save you some time... I do not 
know how cross-browser this is, most of my work is IE-only (not using much IE-only 
functionality, but means I only have to worry about proper operation in one browser!). 
 Here's some code...




<html><head><title>Sorting example</title>

<style>
 BODY      { color: #000000; font-SIZE: 13px; FONT-FAMILY: Verdana; BACKGROUND-COLOR: 
White; }
 B         { color: Navy;    font-SIZE: 13px; FONT-FAMILY: Verdana; BACKGROUND-COLOR: 
#AFAFCA; TEXT-DECORATION: Underline; CURSOR: Hand }
 TD        { color: #000000; font-SIZE: 12px; FONT-FAMILY: Verdana; BACKGROUND-COLOR: 
#AFAFCA; TEXT-DECORATION: None;}
 A:Link    { color: #AFAFCA; font-SIZE: 13px; FONT-FAMILY: Verdana; BACKGROUND-COLOR: 
White;   fONT-WEIGHT: bold; }
 A:Visited { color: #AFAFCA; font-SIZE: 13px; FONT-FAMILY: Verdana; BACKGROUND-COLOR: 
White;   fONT-WEIGHT: bold; }
 A:Hover   { color: Gold;    font-SIZE: 13px; FONT-FAMILY: Verdana; BACKGROUND-COLOR: 
White;   fONT-WEIGHT: bold; }
</Style>

<script>

 // This is an array of our table headers
 var titleArray = new Array("Id", "First Name", "Last Name", "Date");

 // These store what field we are currently sorted on and what direction the last sort 
was in
 var currentField = 0;
 var currentDirection = 0;

 // This is our actual data array
 // Note that for this to work, dates MUST be in the form MM/DD/YYYY!  Nothing else 
will work!
 dataArray       = new Array();
 dataArray[0]    = new Array();
 dataArray[0][0] = "100";
 dataArray[0][1] = "Papa";
 dataArray[0][2] = "Smurf";
 dataArray[0][3] = "10/12/1999";
 dataArray[1]    = new Array();
 dataArray[1][0] = "300";
 dataArray[1][1] = "Fred";
 dataArray[1][2] = "Flinston";
 dataArray[1][3] = "01/12/2000";
 dataArray[2]    = new Array();
 dataArray[2][0] = "400";
 dataArray[2][1] = "Roger";
 dataArray[2][2] = "Wabbit";
 dataArray[2][3] = "03/05/1999";
 dataArray[3]    = new Array();
 dataArray[3][0] = "600";
 dataArray[3][1] = "Wilma";
 dataArray[3][2] = "Flinston";
 dataArray[3][3] = "10/15/2000";
 dataArray[4]    = new Array();
 dataArray[4][0] = "900";
 dataArray[4][1] = "Sleeping";
 dataArray[4][2] = "Beauty";
 dataArray[4][3] = "12/06/1990";
 dataArray[5]    = new Array();
 dataArray[5][0] = "1000";
 dataArray[5][1] = "American";
 dataArray[5][2] = "Beauty";
 dataArray[5][3] = "12/31/2005";

 // This is called when a columm header is clicked.  It determines what field we are 
sorting on,
 // what direction, and calls the actual sort operation
 function sortBy(field) {
  // Determine our sort direction
  currentDirection = (field == currentField) ? !currentDirection : 0;
  currentField = field;
  // Call the sort operation to do the sorting
  dataArray.sort(sortOperation);
  // Reverse the direction if that is applicable now.  We simply sort the array 
irregardless
  // of direction, then reverse it if that is the sort direction now.
  if (currentDirection) { dataArray = dataArray.reverse(); }
  // Create our output table
  createTable(document.all.dataKeeper);
 }
 
 // This is the routine called to compare two elements of our array.  It is the 
comparison operation
 // called by the built-in array sort method, it is essentially part of a bubble sort!
 function sortOperation(a, b) {
  // Convert to lower-case first so that text sorting is correct
  var aC = a[currentField].toLowerCase();
  var bC = b[currentField].toLowerCase();
  // If we are now looking at dates, we need to put them in YYYYMMDD order so that the 
sort works right on them
  if (aC.charAt(2) == "/" && aC.charAt(5) == "/") { aC = aC.substr(6, 4) + 
aC.substr(0, 2) + aC.substr(3, 2); }
  if (bC.charAt(2) == "/" && bC.charAt(5) == "/") { bC = bC.substr(6, 4) + 
bC.substr(0, 2) + bC.substr(3, 2); }
  // If both values are numbers, we can sort them by subtracting them
  if (/^(\-)?\d+(\.\d+)?$/.test(aC) && /^(\-)?\d+(\.\d+)?$/.test(bC)) { return aC - 
bC; }
  // If they aren't numbers, just compare them, letting ASCII do it's thing!
  if (aC < bC)  { return -1; }
  if (aC > bC)  { return 1;  }
  if (aC == bC) { return 0;  }
 }

// Create the output HTML table.  We simply create one long string with all our HTML, 
then output it to the
// object passed in, which happens to be a dHTML layer.
function createTable(target) {
  tblSrc = "<table cellpadding=4 cellspacing=0 border=1>";
  // Titles
  tblSrc += "<tr>";
  for (cTtl in titleArray) {
   tblSrc += "<td onClick='sortBy(" + cTtl + ")'><b>" + titleArray[cTtl] + "</td>";
  }
  tblSrc += "</TR>";
  // Data
  for (dataLine in dataArray) {
   tblSrc += "<tr>";
   for (dataItem in dataArray[dataLine]) {
    tblSrc += "<td>" + dataArray[dataLine][dataItem] + "</td>";
   }
   tblSrc += "</tr>";
  }
  // Finish
  tblSrc += "</table>";
  target.innerHTML = tblSrc;
 }

</script>

</head>

<body onLoad="createTable(dataKeeper);">

<div id="dataKeeper" style="position:relative"></div>

</body>

</html>




Hope that helps!  Let me know if you have any questions.

-- 
Frank W. Zammetti
Founder and Chief Software Architect
Omnytex Technologies
http://www.omnytex.com

On Wed, October 20, 2004 3:13 am, nitin t said:
>   
> hi ,
> suppose i am using struts based app while showing data in various columns
> and i wish to give user the choice to sort the  column based on his choice
> does there is a support in struts html tags or other validator javascript
> generator so that this feature can be performed like we previously done in
> visual basic grids.
> 
> Thanks
> Nitin Trivedi
> 
> 
> 
> Nitin Trivedi
> Trainee Consultant
> M/s Hybrid Cyber Solutions Pvt Ltd.
> 95, Tarang, J.P.Nagar,
> 5th Road, Goregaon (E.)
> Mumbai - 400 063.
> Landline No.- 26864822
> Cell No.-02231204222.
> Email ID:- [EMAIL PROTECTED]
> 
> ****************************************************************************
> ***************************************************************************
> This communication (including any attachments) may contain privileged or
> confidential information intended for a specific individual and purpose,
> and
> is protected by law. If you are not the intended recipient, you should
> delete this communication and/or shred the materials and any attachments
> and
> are hereby notified that any disclosure, copying, or distribution of this
> communication, or the taking of any action based on it, is strictly
> prohibited. Thank you.
> 
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to