One other thing to add :> there is a "key" in the pageContext attributes called topnav and that DOES contain an actual collection of SimpleMenuItems. The plot thickens - how does the ForEach get the collection?
-Jerry -----Original Message----- From: Jerry Rodgers [mailto:[EMAIL PROTECTED] Sent: Friday, December 03, 2004 8:02 AM To: 'Struts Users Mailing List'; 'Mark Lowe' Subject: RE: JSTL, Tiles PutList and Tomcat 5.028 Hi Matk, I have the following statement <tiles:importAttribute /> Which I "think" am lead to believe it imports all the attributes into the page scope. In an effort to figure out what was happening I downloaded the jstl 1.0.6 and built a debug project in eclipse so I could step into the ForEach tag and I am not sure what I am really looking at yet in there but it appears that indeed the item does contain a string and that the items collection on the tag has a "somewhat" string delimited representation of the collection. See below: This is that actual value in the string in the debugger... Is this how it is stored then is ir "reconstituted" into SimpleMenuItem(s) as the tag loops. The string "looks" like a collection because of the "," i.e. it looks like a string tokenizer. [SimpleMenuItem[value=nav.adminhome, link=/aems/session/changefiltertoken.do?btnResetFilter=true, tooltip=impersonationItem, ], SimpleMenuItem[value=nav.account, link=/aems/party/persondetail.do, ], SimpleMenuItem[value=nav.organization, link=/aems/party/organizationdetail.do, ], SimpleMenuItem[value=nav.library, link=/aems/file/filelibrarylist.do, ], SimpleMenuItem[value=nav.addressbook, link=/aems/communication/personsearchlist.do, ], SimpleMenuItem[value=nav.help, link=#, tooltip=help, ], SimpleMenuItem[value=nav.logout, link=/aems/logout.do, ]] And give this sting in the items - the actual when call to next() within the EnumeratonAdapter way in the ForEachSupport class actuall calls the StringTokenizer and returns an item of: [SimpleMenuItem[value=nav.adminhome So it looks like it went to the first "," and thus the subject of my email might really be changed to: "What is causing ForEach to read/load my tiles putlist collection as a string and not as a collection of the SimpleMenuItems they really are"? Pretty darn long subject :> On a side note - not sure if this means anything - when I compiled the course I was required by eclipse to add two new methods to the PageContextImpl in the org.apache.taglibs.standard.lang.jstl.test package does it looks like perhaps the different JSP version might be an issue. i.e. will jstl 1.0.6 work in Tomcat 5.0.28? /* (non-Javadoc) * @see javax.servlet.jsp.JspContext#getExpressionEvaluator() */ public ExpressionEvaluator getExpressionEvaluator() { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.jsp.JspContext#getVariableResolver() */ public VariableResolver getVariableResolver() { // TODO Auto-generated method stub return null; } Thanks, Jerry -----Original Message----- From: Mark Lowe [mailto:[EMAIL PROTECTED] Sent: Friday, December 03, 2004 2:49 AM To: Struts Users Mailing List Subject: Re: JSTL, Tiles PutList and Tomcat 5.028 Have you done this in the jsp? <tiles:useAttribute name="topnav" scope="page" /> MArk On Thu, 2 Dec 2004 12:39:01 -0700, Jim Barrows <[EMAIL PROTECTED]> wrote: > > > > > > -----Original Message----- > > From: Jerry Rodgers [mailto:[EMAIL PROTECTED] > > Sent: Thursday, December 02, 2004 12:11 PM > > To: [EMAIL PROTECTED] > > Subject: JSTL, Tiles PutList and Tomcat 5.028 > > > > > > Hi All, > > > > > > > > I have a jsp page that I am trying to run on Tomcat that > > currently works in > > Weblogic. It appears the primary problem is that the forEach > > tag is not > > putting the variable menuItem into the pageContext attributes > > and or it > > thinks the menuItem is of type String. I am not sure where my actually > > problem is (tiles, tomcat etc). > > > > > > > > > > > > It appears Tomcat is generating code when compiling the JSP > > that isn't aware > > of the type of class the > > org.apache.struts.tiles.beans.SimpleMenuItem is - > > it looks like at run time it thinks it is a String. > > > > > > > > > > > > A snippet of my JSP looks like this (jstl tags - partial): > > > > <core:forEach var="menuItem" varStatus="status" items="${topnav}"> > > > > <core:choose> > > > > <core:when test="${menuItem.tooltip=='help'}"> > > I do something similar in my code, and it works. > It does look like it's not figuring out what type the menuItem is though.... > > <snip/> > > > > > > > When I check the pageContext attributes via a debugger I > > actually see an > > item in the collection with the key "topnav" and it contains > > a Vector of > > items that appear to be of type SimpleMenuItem. However I > > never see the item > > called menuItem that I thought the forEach tag would place in > > there for me. > > And I think the tutorial is agreeing with you: > The forEach tag allows you to iterate over a collection of objects. You specify the collection via the items attribute, and the current item is available through a scope variable named by the item attribute. > > A large number of collection types are supported by forEach, including all implementations of java.util.Collection and java.util.Map. If the items attribute is of type java.util.Map, then the current item will be of type java.util.Map.Entry, which has the following properties: > > * key - the key under which the item is stored in the underlying Map > * value - the value that corresponds to the key > > Arrays of objects as well as arrays of primitive types (for example, int) are also supported. For arrays of primitive types, the current item for the iteration is automatically wrapped with its standard wrapper class (for example, Integer for int, Float for float, and so on). > > Implementations of java.util.Iterator and java.util.Enumeration are supported but these must be used with caution. Iterator and Enumeration objects are not resettable so they should not be used within more than one iteration tag. Finally, java.lang.String objects can be iterated over if the string contains a list of comma separated values (for example: Monday,Tuesday,Wednesday,Thursday,Friday). > > Here's the shopping cart iteration from the previous section with the forEach tag: > > <c:forEach var="item" items="${sessionScope.cart.items}"> > ... > <tr> > <td align="right" bgcolor="#ffffff"> > ${item.quantity} > </td> > ... > </c:forEach> > > The forTokens tag is used to iterate over a collection of tokens separated by a delimiter. > from http://java.sun.com/webservices/docs/1.3/tutorial/doc/index.html > > > > > > > > > Thanks for any help you may be able to provide, > > > > > > > > Jerry Rodgers > > > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]