|
View:
New views
5 Messages
—
Rating Filter:
Alert me
|
|
|
Conditional formatting elements of a collection in c:forEachHello everyone,
I'm trying to display a list of items in a collection using JSTL. Each item in the collection has x, y, z and id variables. The user can choose whether he wants the display order (of the items in the collection) to be 1) x y z 2) z y x As far as I know the display ordering can be accomplished in two ways: 1) as shown in the code snippet below, create two different loops for each display format. The drawback with this approach is that a lot of the common stuff is duplicated between the two loops. 2) Have a c:choose , selection within a single loop, which decides between the two formats. The drawback is that the the same condition checking repeats for each loop iteration. Is there a way to set the formatting outside the loop , and use that format in the loop to address the two drawbacks above. <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title></title> </head> <body> <c:choose> <c:when test="${param.listBy == 'xFirst' }"> <c:forEach var="item" items="${requestScope.items}"> ${item.x} ${item.y} ${item.z} <a href="/show?id=${item.id}">show item</a> <a href="/edit?id=${item.id}">edit item</a> <a href="/delete?id=${item.id}">delete item</a> </c:forEach> </c:when> <c:otherwise> <c:forEach var="item" items="${requestScope.items}"> ${item.z} ${item.y} ${item.x} <a href="/show?id=${item.id}">show item</a> <a href="/edit?id=${item.id}">edit item</a> <a href="/delete?id=${item.id}">delete item</a> </c:forEach> </c:otherwise> </c:choose> </body> </html> Any input is appreciated. -Rashmi --------------------------------------------------------------------- To unsubscribe, e-mail: taglibs-user-unsubscribe@... For additional commands, e-mail: taglibs-user-help@... |
|
|
Re: Conditional formatting elements of a collection in c:forEachOn Wed, Feb 11, 2009 at 8:53 AM, Rashmi <rashmi.sub@...> wrote:
> Hello everyone, > > I'm trying to display a list of items in a collection using JSTL. > > Each item in the collection has x, y, z and id variables. > > The user can choose whether he wants the display order (of the items > in the collection) to be > > 1) x y z > 2) z y x > > As far as I know the display ordering can be accomplished in two ways: > 1) as shown in the code snippet below, create two different loops for > each display format. The drawback with this approach is that a lot of > the common stuff is duplicated between the two loops. > > 2) Have a c:choose , selection within a single loop, which decides > between the two formats. The drawback is that the the same condition > checking repeats for each loop iteration. > > Is there a way to set the formatting outside the loop , and use that > format in the loop to address the two drawbacks above. Assuming you have a resource bundle around somewhere, add two format strings to the bundle, one for each of your two display orders; use a condition ('when', 'if' or whatever) to set a variable with the appropriate key; then use that variable to specify the key to <fmt:message> within your loop. -- Martin Cooper > <%@ page contentType="text/html;charset=UTF-8" language="java" %> > <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> > <html> > <head> > <title></title> > </head> > <body> > > <c:choose> > <c:when test="${param.listBy == 'xFirst' }"> > <c:forEach var="item" items="${requestScope.items}"> > ${item.x} ${item.y} ${item.z} > <a href="/show?id=${item.id}">show item</a> > <a href="/edit?id=${item.id}">edit item</a> > <a href="/delete?id=${item.id}">delete item</a> > </c:forEach> > </c:when> > <c:otherwise> > <c:forEach var="item" items="${requestScope.items}"> > ${item.z} ${item.y} ${item.x} > <a href="/show?id=${item.id}">show item</a> > <a href="/edit?id=${item.id}">edit item</a> > <a href="/delete?id=${item.id}">delete item</a> > </c:forEach> > </c:otherwise> > </c:choose> > </body> > </html> > > Any input is appreciated. > > -Rashmi > > --------------------------------------------------------------------- > To unsubscribe, e-mail: taglibs-user-unsubscribe@... > For additional commands, e-mail: taglibs-user-help@... > > |
|
|
Re: Conditional formatting elements of a collection in c:forEachThank you Martin, I'm new to using resource bundle, I'll learn it and
give this a try. -Rashmi On Wed, Feb 11, 2009 at 12:29 PM, Martin Cooper <martinc@...> wrote: > > Assuming you have a resource bundle around somewhere, add two format strings > to the bundle, one for each of your two display orders; use a condition > ('when', 'if' or whatever) to set a variable with the appropriate key; then > use that variable to specify the key to <fmt:message> within your loop. > > -- > Martin Cooper > --------------------------------------------------------------------- To unsubscribe, e-mail: taglibs-user-unsubscribe@... For additional commands, e-mail: taglibs-user-help@... |
|
|
Re: Conditional formatting elements of a collection in c:forEachI tried the ResourceBundle suggestion made by Martin and it works really well.
ItemFormats.properties (placed in /WEB-INF/classes folder) file has : formatXFirst = {0} {1} {2} formatZFirst = {2} {0} {1} And in the JSP I have: <fmt:setBundle basename="ItemFormats" var="itemOrder"/> followed by setting a key variable to hold either formatXFirst and formatZFirst and in the single loop: <fmt:message key="${formatKey}" bundle="${itemOrder}"> <fmt:param value="${item.x}"/> <fmt:param value="${item.y}"/> <fmt:param value="${item.z}"/> </fmt:message> The only problem is that the fmt:message prints null if the variable value is null. as in ValueX null ValueZ , Without formatting applied , printing just ${item.x} ${item.y} ${item.z} , prints ValueX ValueZ (the null value is not printed, which is better). -Rashmi On Wed, Feb 11, 2009 at 12:45 PM, Rashmi <rashmi.sub@...> wrote: > Thank you Martin, I'm new to using resource bundle, I'll learn it and > give this a try. > > -Rashmi > > > On Wed, Feb 11, 2009 at 12:29 PM, Martin Cooper <martinc@...> wrote: >> >> Assuming you have a resource bundle around somewhere, add two format strings >> to the bundle, one for each of your two display orders; use a condition >> ('when', 'if' or whatever) to set a variable with the appropriate key; then >> use that variable to specify the key to <fmt:message> within your loop. >> >> -- >> Martin Cooper >> > --------------------------------------------------------------------- To unsubscribe, e-mail: taglibs-user-unsubscribe@... For additional commands, e-mail: taglibs-user-help@... |
|
|
Re: Conditional formatting elements of a collection in c:forEachThe null value display problem is also sovled (after referring to the
JSTL 1.2 spec) : <fmt:message key="${formatKey}" bundle="${nameOrder}"> <fmt:param><c:out value="${person.firstName}" default=""/></fmt:param> <fmt:param><c:out value="${person.middleInitial}" default=""/></fmt:param> <fmt:param><c:out value="${person.lastName}" default=""/></fmt:param> </fmt:message> -Rashmi --------------------------------------------------------------------- To unsubscribe, e-mail: taglibs-user-unsubscribe@... For additional commands, e-mail: taglibs-user-help@... |
| Free embeddable forum powered by Nabble | Forum Help |