Ok, that works - thanks a lot!
So, if I understand this right, it's not possible to directly address
something with the key? You have to go through the whole collection, right?

Regards,
Eric

-----Original Message-----
From: Gideon, Thomas [mailto:[EMAIL PROTECTED]]
Sent: Mittwoch, 9. Oktober 2002 20:58
To: 'Tag Libraries Users List'
Subject: RE: JSTL and HashMap: How does it work?


With a Map in the <c:forEach/> tag, you need to de-reference the value
explicitly in your EL in the nested <c:out/>, like so:

stock.numberOfCharts = <c:out value="${stock.numberOfCharts}"/><br>
stock.charts = <c:out value="${stock.charts}"/>
<c:forEach var="chart" items="${stock.charts}">
        <br>-> chart = <c:out value="${chart.value}"/>
//-----------------------------------------^^^^^
</c:forEach>

The <c:forEach/> tag gets a Set by calling the entrySet() method of the Map,
then iterates over that.  The Set contains Map.Entry instances which define
getKey() and getValue() methods which can be accessed in the usual way, as
Java Bean properties, in EL.

Thomas Gideon
Sr. Software Developer
B2eMarkets

301.230.2236  Tel.
301.230.2248  Fax.
[EMAIL PROTECTED]
www.B2eMarkets.com



> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
> Sent: Wednesday, October 09, 2002 2:03 PM
> To: [EMAIL PROTECTED]
> Subject: JSTL and HashMap: How does it work?
> 
> 
> Hi all
> 
> According to the documentation, it's possible to get data 
> from a HashMap in
> JSTL. Unfortunately, it doesn't really work for me...
> 
> Here's the deal: A stock has a collection of charts, thus:
> 
> stock.numberOfCharts = <c:out value="${stock.numberOfCharts}"/><br>
> stock.charts = <c:out value="${stock.charts}"/>
> <c:forEach var="chart" items="${stock.charts}">
>       <br>-> chart = <c:out value="${chart}"/>
> </c:forEach>
> 
> results in
> 
> stock.numberOfCharts = 9
> stock.charts = 
> {1M=ch.xobix.contentgroup.controller.ImageWrapper@f6ae1c,
> 2M=ch.xobix.contentgroup.controller.ImageWrapper@20d6b7,
> 3M=ch.xobix.contentgroup.controller.ImageWrapper@f08d0f,
> 6M=ch.xobix.contentgroup.controller.ImageWrapper@bcfa38,
> 1Y=ch.xobix.contentgroup.controller.ImageWrapper@cfaf6e,
> 2Y=ch.xobix.contentgroup.controller.ImageWrapper@6989e,
> 3Y=ch.xobix.contentgroup.controller.ImageWrapper@dd7a7,
> 5Y=ch.xobix.contentgroup.controller.ImageWrapper@c94114,
> YTD=ch.xobix.contentgroup.controller.ImageWrapper@cf9bf0} 
> -> chart = 1M=ch.xobix.contentgroup.controller.ImageWrapper@f6ae1c 
> -> chart = 2M=ch.xobix.contentgroup.controller.ImageWrapper@20d6b7 
> -> chart = 3M=ch.xobix.contentgroup.controller.ImageWrapper@f08d0f 
> -> chart = 6M=ch.xobix.contentgroup.controller.ImageWrapper@bcfa38 
> -> chart = 1Y=ch.xobix.contentgroup.controller.ImageWrapper@cfaf6e 
> -> chart = 2Y=ch.xobix.contentgroup.controller.ImageWrapper@6989e 
> -> chart = 3Y=ch.xobix.contentgroup.controller.ImageWrapper@dd7a7 
> -> chart = 5Y=ch.xobix.contentgroup.controller.ImageWrapper@c94114 
> -> chart = YTD=ch.xobix.contentgroup.controller.ImageWrapper@cf9bf0
> 
> which is fine. However, how can I address one entry?
> If I try
> 
> chart = <c:out value="${stock.charts["1M"]}"/>
> 
> I get
> 
> javax.servlet.ServletException: 
> /jsp/financialdata/show.jsp(33,40) Attribute
> 1M has no value
> 
> By the way, my getCharts() returns a LinkedHashMap (I wanted the same
> sequence as when I inserted the objects). Theoretically, 
> shouldn't I be able
> to traverse it like e.g. an ArrayList?
> 
> chart[0] = <c:out value="${stock.charts[0]}"/>
> 
> doesn't give me anything, though...
> 
> 
> Best regards,
> Eric
> 
> 
> --
> To unsubscribe, e-mail:   
> <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: 
> <mailto:[EMAIL PROTECTED]>
> 

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


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

Reply via email to