You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@velocity.apache.org by "Leyzerzon, Simeon G" <Si...@gs.com> on 2003/02/27 19:45:10 UTC
order of the insertion
Is it possible to retain the order in which elements where inserted into a
map while this
map is being rendered by Velocity using #foreach?
I'm using LinkedHashMap when building the context, but it is displayed in
different order.
Here is the code:
Hashtable branchesMap = new Hashtable();
ArrayList branchData = null;
Map row = null;
branchData = new ArrayList();
row = new LinkedHashMap();
row.put("loan_number","12384"); //column 1
row.put("borrower_first_name", "dobrinya");//column 2
row.put("borrower_last_name", "nikitich");//column 3
branchData.add(row); //add row to array list
row = new LinkedHashMap();
row.put("loan_number","85725"); //column 1
row.put("borrower_first_name",
"vasilisa");//column 2
row.put("borrower_last_name",
"premudraya");//column 3
branchData.add(row); //add row to array list
row = new LinkedHashMap();
row.put("loan_number","37271"); //column 1
row.put("borrower_first_name", "solovei");//column 2
row.put("borrower_last_name", "razboinik");//column 3
branchData.add(row); //add row to array list
row = new LinkedHashMap();
row.put("loan_number","38247"); //column 1
row.put("borrower_first_name", "devitza");//column 2
row.put("borrower_last_name", "krasa");//column 3
branchData.add(row); //add row to array list
row = new LinkedHashMap();
row.put("loan_number","96441"); //column 1
row.put("borrower_first_name", "kashei");//column 2
row.put("borrower_last_name", "bessmertniy");//column 3
branchData.add(row); //add row to array list
branchesMap.put("59753",branchData); //add branch data to
branchesMap
branchData = new ArrayList();
row = new LinkedHashMap();
row.put("loan_number","72821");
//column 1
row.put("borrower_first_name",
"nikita");//column 2
row.put("borrower_last_name",
"khrushev");//column 3
branchData.add(row); //add row to array list
row = new LinkedHashMap();
row.put("loan_number","71198");
//column 1
row.put("borrower_first_name",
"nadezhda");//column 2
row.put("borrower_last_name",
"beskozirkina");//column 3
branchData.add(row); //add row to array list
row = new LinkedHashMap();
row.put("loan_number","15742");
//column 1
row.put("borrower_first_name",
"andrei");//column 2
row.put("borrower_last_name",
"volkonskiy");//column 3
branchData.add(row); //add row to array list
row = new LinkedHashMap();
row.put("loan_number","82459");
//column 1
row.put("borrower_first_name",
"maria");//column 2
row.put("borrower_last_name",
"stuart");//column 3
branchData.add(row); //add row to array list
row = new LinkedHashMap();
row.put("loan_number","58231");
//column 1
row.put("borrower_first_name",
"hector");//column 2
row.put("borrower_last_name",
"berlioz");//column 3
branchData.add(row); //add row to array list
branchesMap.put("59825",branchData);
context.put("branches", branchesMap);
The output:
khrushev~72821~nikita~
beskozirkina~71198~nadezhda~
volkonskiy~15742~andrei~
stuart~82459~maria~
berlioz~58231~hector~
nikitich~12384~dobrinya~
premudraya~85725~vasilisa~
razboinik~37271~solovei~
krasa~38247~devitza~
bessmertniy~96441~kashei~
The desired output:
72821~nikita~khrushev~
71198~nadezhda~beskozirkina~
15742~andrei~volkonskiy~
82459~maria~stuart~
58231~hector~berlioz~
12384~dobrinya~nikitich~
85725~vasilisa~premudraya~
37271~solovei~razboinik~
38247~devitza~krasa~
96441~kashei~bessmertniy~
Thanks.
Simeon
---------------------------------------------------------------------
To unsubscribe, e-mail: velocity-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: velocity-user-help@jakarta.apache.org
Re: order of the insertion
Posted by Simon Christian <si...@stoutstick.com>.
Hi Simeon,
It's a little difficult to see what's going on currently without the
velocity template contents, but there's a few ways to achieve what
you're after.
The most explicit method would be to create Branch and Loan classes, and
populate ArrayLists and Maps of some sort e.g.:
------------- rough code for classes ------------------
public class Branch {
private String id;
public Branch( String _id ) {
id = _id;
}
public String getId() {
return id;
}
}
public class Loan {
private String id;
private String firstname;
private String lastname;
public Loan( String _id, String _fname, String _lname ) {
id = _id;
firstname = _fname;
lastname = _lname;
}
public String getId() {
return id;
}
public String getFirstname() {
return firstname;
}
public String getLastname() {
return lastname;
}
}
------------- rough code for populating context ------------------
ArrayList branches = new ArrayList();
HashMap branch_loan_map = new HashMap();
Branch branch1 = new Branch( "59753" );
ArrayList loans1 = new ArrayList( 5 );
loans1.add( new Loan( "12384", "dobrinya", "nikitich" ) );
loans1.add( new Loan( "85725", "vasilisa", "premudraya" ) );
loans1.add( new Loan( "37271", "solovei", "razboinik" ) );
branches.add( branch1 );
branch_loan_map.put( branch1, loans1 );
// add the remaining branches and loans
// this process would normally be an iteration over a ResultSet
// or similar
context.put( "branches", branches );
context.put( "branche_loan_map", branch_loan_map);
-------------------- template chunk --------------------------
#foreach( $branch in $branches )
#set( $loans = $branch_loan_map.get( $branch ) )
Branch: $branch.Id
#foreach( $loan in $loans )
${loan.Id}~${loan.Firstname}~${loan.Lastname}
#end
#end
--------------------------------------------------------------
I frequently display information like this, and it works very nicely,
HTH
- simon
Leyzerzon, Simeon G wrote:
> Is it possible to retain the order in which elements where inserted into a
> map while this
> map is being rendered by Velocity using #foreach?
> I'm using LinkedHashMap when building the context, but it is displayed in
> different order.
> Here is the code:
>
> Hashtable branchesMap = new Hashtable();
>
> ArrayList branchData = null;
>
> Map row = null;
>
> branchData = new ArrayList();
> row = new LinkedHashMap();
>
> row.put("loan_number","12384"); //column 1
> row.put("borrower_first_name", "dobrinya");//column 2
> row.put("borrower_last_name", "nikitich");//column 3
> branchData.add(row); //add row to array list
>
>
> row = new LinkedHashMap();
> row.put("loan_number","85725"); //column 1
> row.put("borrower_first_name",
> "vasilisa");//column 2
> row.put("borrower_last_name",
> "premudraya");//column 3
> branchData.add(row); //add row to array list
>
> row = new LinkedHashMap();
> row.put("loan_number","37271"); //column 1
> row.put("borrower_first_name", "solovei");//column 2
> row.put("borrower_last_name", "razboinik");//column 3
> branchData.add(row); //add row to array list
>
> row = new LinkedHashMap();
> row.put("loan_number","38247"); //column 1
> row.put("borrower_first_name", "devitza");//column 2
> row.put("borrower_last_name", "krasa");//column 3
> branchData.add(row); //add row to array list
>
>
> row = new LinkedHashMap();
> row.put("loan_number","96441"); //column 1
> row.put("borrower_first_name", "kashei");//column 2
> row.put("borrower_last_name", "bessmertniy");//column 3
> branchData.add(row); //add row to array list
>
>
> branchesMap.put("59753",branchData); //add branch data to
> branchesMap
>
>
>
> branchData = new ArrayList();
>
> row = new LinkedHashMap();
> row.put("loan_number","72821");
> //column 1
> row.put("borrower_first_name",
> "nikita");//column 2
> row.put("borrower_last_name",
> "khrushev");//column 3
> branchData.add(row); //add row to array list
>
> row = new LinkedHashMap();
> row.put("loan_number","71198");
> //column 1
> row.put("borrower_first_name",
> "nadezhda");//column 2
> row.put("borrower_last_name",
> "beskozirkina");//column 3
> branchData.add(row); //add row to array list
>
> row = new LinkedHashMap();
> row.put("loan_number","15742");
> //column 1
> row.put("borrower_first_name",
> "andrei");//column 2
> row.put("borrower_last_name",
> "volkonskiy");//column 3
> branchData.add(row); //add row to array list
>
> row = new LinkedHashMap();
> row.put("loan_number","82459");
> //column 1
> row.put("borrower_first_name",
> "maria");//column 2
> row.put("borrower_last_name",
> "stuart");//column 3
> branchData.add(row); //add row to array list
>
>
> row = new LinkedHashMap();
> row.put("loan_number","58231");
> //column 1
> row.put("borrower_first_name",
> "hector");//column 2
> row.put("borrower_last_name",
> "berlioz");//column 3
> branchData.add(row); //add row to array list
>
>
> branchesMap.put("59825",branchData);
> context.put("branches", branchesMap);
>
> The output:
>
> khrushev~72821~nikita~
> beskozirkina~71198~nadezhda~
> volkonskiy~15742~andrei~
> stuart~82459~maria~
> berlioz~58231~hector~
> nikitich~12384~dobrinya~
> premudraya~85725~vasilisa~
> razboinik~37271~solovei~
> krasa~38247~devitza~
> bessmertniy~96441~kashei~
>
> The desired output:
>
> 72821~nikita~khrushev~
> 71198~nadezhda~beskozirkina~
> 15742~andrei~volkonskiy~
> 82459~maria~stuart~
> 58231~hector~berlioz~
> 12384~dobrinya~nikitich~
> 85725~vasilisa~premudraya~
> 37271~solovei~razboinik~
> 38247~devitza~krasa~
> 96441~kashei~bessmertniy~
>
> Thanks.
> Simeon
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: velocity-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: velocity-user-help@jakarta.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: velocity-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: velocity-user-help@jakarta.apache.org
RE: order of the insertion - works for me
Posted by Tim Colson <tc...@cisco.com>.
> Is it possible to retain the order in which elements where
> inserted into a map while this
> map is being rendered by Velocity using #foreach?
I was about to jump in and say "no" as maps don't have order....but then
read a little further....
> I'm using LinkedHashMap when building the context,
Seems LinkedHashMap is new in JDK 1.4 and is supposed to maintain the
order of insertion.
http://java.sun.com/j2se/1.4/docs/api/java/util/LinkedHashMap.html
Cool and Interesting.
I tried it out and it worked fine for me. :-)
Code/template/output below, using
Velocity 1.3 released
JSDK 1.4.1 on Winbloze XP
and the VelocityViewServlet.
Cheers,
Timo
// TESTING CODE
ArrayList branchData = new ArrayList();
LinkedHashMap row = null;
row = new LinkedHashMap();
row.put("loan_number","123"); //column 1
row.put("borrower_first_name", "Tim");//column 2
row.put("borrower_last_name", "Colson");//column 3
branchData.add(row); //add row to array list
row = new LinkedHashMap();
row.put("loan_number","456"); //column 1
row.put("borrower_first_name", "Joe");//column 2
row.put("borrower_last_name", "Normal");//column 3
branchData.add(row); //add row to array list
row = new LinkedHashMap();
row.put("borrower_last_name", "Backward");//column 1
row.put("borrower_first_name", "Joe");//column 2
row.put("loan_number","789"); //column 3
branchData.add(row); //add row to array list
request.setAttribute("branch_list", branchData);
// END TEST
--- template.vm
TESTING
<PRE>
#foreach ($rowhash in $branch_list)
#foreach ($item in $rowhash)$item #end
#end
</PRE>
---- OUTPUT
TESTING
123 Tim Colson
456 Joe Normal
Backward Joe 789
---------------------------------------------------------------------
To unsubscribe, e-mail: velocity-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: velocity-user-help@jakarta.apache.org