Re: Problem when a use a x:forEach into another x:forEach
"Sébastien Brodeur" <[email protected]>
| Newsgroups | gmane.comp.jakarta.taglibs.user |
|---|---|
| Message-ID | <[email protected]> |
This code work perflectly in JSTL 1.0. On 1/27/07, Rashmi Rubdi <[email protected]> wrote: > > Sébastien, > > I tried your original JSP code and was able to reproduce the problem you > indicated in your first e-mail in JSTL 1.1 and Tomcat 5.5. > > Then I made few changes to the JSP page as follows. I renamed some > variables to make the code less ambiguous to read but the logic remains the > same. > > <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> > <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> > > <c:import var="xml_collections" url="/p/test6/collections.xml" /> > <x:parse xml="${xml_collections}" var="pCollections" scope="request"/> > > <c:import var="xml_books" url="/p/test6/books.xml" /> > <x:parse xml="${xml_books}" var="pBooks" scope="request"/> > > <x:forEach select="$pCollections/collections/collection" > var="vCollection"> > <x:out select="name" /> > <x:set select="id" var="cId"/> > > <ul> > <x:forEach select="$pBooks/books/book[collection_id=$cId]" > var="vBook"> > <li><x:out select="$vBook/title" /></li> > print test > </x:forEach> > </ul> > > </x:forEach> > > > The code inside the inner x:forEach never executes. I think it never > executes because the inner for loop , is not inside the context of the XML > node in the outer for loop. > > If you look at the outer x:forEach loop > the xml context node is $pCollections/collections/collection , and in the > inner x:forEach $pBooks/books/book , does not fall under the context of the > the external loop. > > If I'm not wrong, I think nesting of x:forEach works as long as the > context of the nested x:forEach falls under that of the outer x:forEach. > > One solution to achieve the nested output would be to first combine the 2 > XML documents by transforming them with XSLT to create a new XML document, > then use the new XML document to achieve the nesting. I haven't tried such a > transformation, but I will try it in case I'm right about nesting of > x:forEach doesn't work with unrelated contexts. > > Are you saying that your original code worked in JSTL1.0 and is not > working in JSTL1.1 ? Or you tried this code for the first time in JSTL1.1and never in > JSTL1.0? > > -Rashmi > > ----- Original Message ---- > From: Sébastien Brodeur <[email protected]> > To: Tag Libraries Users List <[email protected]> > Sent: Saturday, January 27, 2007 8:37:56 AM > Subject: Re: Problem when a use a x:forEach into another x:forEach > > > Hi Rashmi, > > Thank you for the answer. > > Have you been able to reproduce the error? Is my syntax wrong (I'm not > thrill by Node context :-) ? > > Even if a try to use a <c:catch> block, I got no error. (I still have to > look in the error log thou, first think Monday morning). > > 1) By using Servlet 2.4 jar, you mean are we using a Servlet > 2.4container? If so, yes. > > 2) I already change the web.xml file to use servlet 2.4 > > 3) I use a local version (I made sure the .tld file are the one coming > with > the taglibs JSTL 1.1 package.) of the taglibs declaration. > > So I use: > > <%@ taglib prefix="c" uri="/WEB-INF/c.tld" %> > <%@ taglib prefix="x" uri="/WEB-INF/x.tld" %> > > instead of: > > <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"; %> > <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"; %> > > If a try the latest, I got a error. (Is it only namespace or some > firewall > may be blocking those???) > > Once again, thank you > > On 1/27/07, Rashmi Rubdi <[email protected]> wrote: > > > > Are you getting any errors in the log? > > > > When you upgrade from JSTL1.0 to JSTL1.1 you need to make some changes > or > > verify these changes: > > > > 1) Use Servlet 2.4 jar > > > > 2) Change web.xml to servlet 2.4 version: > > > > <web-app version="2.4" > > xmlns="http://java.sun.com/xml/ns/j2ee"; > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; > > xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee > > http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd";> > > > > 3) Change tag library declarations to: > > > > <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"; %> > > <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"; %> > > Similarly upgrade other JSTL namespace URIs > > > > -Rashmi > > > > ----- Original Message ---- > > From: Sébastien Brodeur <[email protected]> > > To: [email protected] > > Sent: Friday, January 26, 2007 2:03:02 PM > > Subject: Problem when a use a x:forEach into another x:forEach > > > > > > I'm currently migrating my application from WebSphere 5 (JSTL 1.0) to > > WebSphere 6 (JSTL 1.1), and so far, the XML taglibs give us a lot of > > trouble. > > > > For example : > > > > > > > ------------------------------------------------------------------------------------------------------ > > collections.xml > > > > <?xml version="1.0" encoding="ISO-8859-1"?> > > <collections> > > <collection> > > <id>horror</id> > > <name>Horror novel</name> > > </collection> > > <collection> > > <id>scifi</id> > > <name>Sci-Fi novel</name> > > </collection> > > </collections> > > > > > > > ------------------------------------------------------------------------------------------------------ > > books.xml > > > > <?xml version="1.0" encoding="ISO-8859-1"?> > > <books> > > <book> > > <collection_id>scifi</collection_id> > > <title>Robots</title> > > </book> > > <book> > > <collection_id>scifi</collection_id> > > <title>The Moon is a Hashes Mistress</title> > > </book> > > <book> > > <collection_id>scifi</collection_id> > > <title>Spaceship Tropper</title> > > </book> > > <book> > > <collection_id>horror</collection_id> > > <title>This</title> > > </book> > > </books> > > > > > > > ------------------------------------------------------------------------------------------------------ > > books.jsp > > > > <%@ taglib prefix="c" uri="/WEB-INF/c.tld" %> > > <%@ taglib prefix="x" uri="/WEB-INF/x.tld" %> > > > > <c:import var="xml_collections" url="http://localhost/collections.xml";; > /> > > <x:parse xml="${xml_collections}" var="collections" scope="request"/> > > > > <c:import var="xml_books" url="http://www.localhost/books.xml";; /> > > <x:parse xml="${xml_books}" var="books" scope="request"/> > > > > <x:forEach select="$collections/collections/collection" > var="collection"> > > <x:out select="$collection/name" /> > > <ul> > > <x:forEach select="$books/books/book[collection_id=$collection/id]" > > var="book"> > > <li><x:out select="$book/title" /></li> > > </x:forEach> > > </ul> > > </x:forEach> > > > > > > > ------------------------------------------------------------------------------------------------------ > > Output (WebSphere 5 using JSTL 1.0) > > > > Horror novel > > <ul> > > <li>This</li> > > </ul> > > > > Sci-Fi novel > > <ul> > > <li>Robots</li> > > <li>The Moon is a Hashes Mistress</li> > > <li>Spaceship Tropper</li> > > </ul> > > > > > > > ------------------------------------------------------------------------------------------------------ > > > > Output (WebSphere 6 using JSTL 1.1) > > > > Horror novel > > <ul> > > </ul> > > Sci-Fi novel > > <ul> > > </ul> > > > > > > Any idea how to do that without changing the structure of the two XML > > files? > > > > Thank! > > > > -- > > Sébastien Brodeur > > [email protected] > > Site Web : http://www.un-programmeur-php.ca/ > > > > > > > > > > > ____________________________________________________________________________________ > > Cheap talk? > > Check out Yahoo! Messenger's low PC-to-Phone call rates. > > http://voice.yahoo.com > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [email protected] > > For additional commands, e-mail: [email protected] > > > > > > > -- > Sébastien Brodeur > [email protected] > Site Web : http://www.un-programmeur-php.ca/ > > > > > ____________________________________________________________________________________ > Yahoo! Music Unlimited > Access over 1 million songs. > http://music.yahoo.com/unlimited > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > -- Sébastien Brodeur [email protected] Site Web : http://www.un-programmeur-php.ca/