Re: Creating 2 D arraylist
maralfarshadi@yahoo.com wrote:
Thank you very much for the answer and code. Since I am using fixed
columns, I guess this method of finding index as you mentioned
(listIndex = row * columnWidth + column ) is great ... I just have one
concern .... If I use EL to display the arraylist in JSP, how can I
display it in tabular format ? If I use foreach [sic] , it will be displayed
as a single column , not tabular.
There is a principle Andrew often mentions: look to the goal rather than the
strategy.
Your goal, if I may be so bold, is to display a table of values. Your
strategy seems to be to layout the table column by column and row by row in
your data structure. Another strategy is to use a JSP layout that maps value
object attributes to columns of the table.
An EL, really we mean a JSTL, <c:forEach> works best with a list where each
column maps to an attribute of a value object, where the row represents the
public interface of the object, rather than a 2-D list. Then you get not just
one column but as many as you specify. It does couple the JSP to (some of)
the public attributes of the value object.
The Sun tutorial shows a typical example similar to:
<c:forEach var="item" items="${cart.items}">
<http://java.sun.com/javaee/5/docs/tutorial/doc/bnakh.html#bnakm>
(One might use the newer "pound-sign" unified EL expression "#{cart.items}".
This would affect the semantics of the expression.)
The 'items' attribute is a List<Item> (or even Iterable<Item>) where 'Item' is
the value object type. ('cart' is an object visible to the JSP at the start
of the loop.)
(Struts 1.x <logic:iterate> tag works sort of like this, too.
<logic:iterate id="item" name="cart" property="items">
)
<c:forEach var="item" items="${cart.items}">
<tr>
<td><c:out value="${item.name}" /></td>
<td><c:out value="${item.worth}" /></td>
<td><c:out value="${item.contactInfo}" /></td>
</tr>
</c:forEach>
There are Java Server Faces components off the shelf that encapsulate this
sort of logic, although maybe not with the exact layout you're seeking.
<h:panelGrid> lays out a table that has a whole lot of options for headers,
footers, embedded components, Its purpose is to coordinate with a CSS style
sheet to produce really nice layouts backed by simple Collections or Maps of
value objects, possibly updatable.
--
Lew