I'm coming into the thread late, so that's why I'm replying to a random
message in it...
How about adding indexName and indexProperty attributes. If indexed is
true it will use those properties to find a bean containing the current
index value. If indexed is true and those other attributes are not set,
then it defaults to the current mechanism for determining the index
value.
<c:forEach var="item" items="${items}" varStatus="status">
<html:checkbox indexed="true" indexName="status" indexProperty="index"
.../>
</c:forEach>
That way you don't have any direct dependency on JSTL, and it might work
with some other third-party looping tags (for whatever that's worth).
I'm not actually using JSTL yet (or Struts 1.1 for that matter) so maybe
this doesn't work, but it's a thought.
--
Tim Moore / Blackboard Inc. / Software Engineer
1899 L Street, NW / 5th Floor / Washington, DC 20036
Phone 202-463-4860 ext. 258 / Fax 202-463-4863
> -----Original Message-----
> From: Martin Cooper [mailto:[EMAIL PROTECTED]]
> Sent: Saturday, January 04, 2003 4:37 PM
> To: Struts Developers List
> Subject: RE: Another bright idea, make "indexed" work with
> JSTL forEach and friends
>
>
>
>
> On Sat, 4 Jan 2003, James Turner wrote:
>
> > On Sat, 4 Jan 2003, Martin Cooper wrote:
> >
> > > If you want to do this, I'd rather see it happen in the html-el
> > > taglib than the regular html taglib. Struts-EL already depends on
> > > JSTL, and is designed to work in cooperation with it, so
> it's a much
> > > more natural fit
> > > than trying to sneak JSTL functionality into the regular tags.
> >
> > I mildly disagree. EL is to allow struts HTML tags to use
> EL syntax.
>
> Yes. And why would you want to do that? Because you're
> already using JSTL tags in your pages, and you want the two
> to work together.
>
> > This deals with letting the standard tags find JSTL looping
> > constructs.
>
> Yes. And why would you want to do that? Because you're
> already using JSTL tags in your pages, and you want the two
> to work together.
>
> Notice the remarkable similarity in the two reasons for using
> these pieces of functionality? ;-)
>
> That's why I think your suggestion fits much better in
> Struts-EL than in the Struts core. Once we require Servlets
> 2.3 / JSP 1.2 for Struts, then I'm all for having this in the
> core, along with the rest of Struts-EL. Prior to that, I just
> don't like the idea of muddying the core html taglib with
> references to JSTL, especially when you have to do it all
> through reflection.
>
> --
> Martin Cooper
>
>
> > As is, you can "*almost* entirely eliminate all the Struts
> tags except
> > for the HTML tags in favor of JSTL substitutes, since only the HTML
> > tags deal with things like actions. By implementing this, we can
> > eliminate having to use the logic taglibs at all. And the
> change is
> > pretty darn innocuous, here's the revisted code from
> BaseHandlerTag,
> > which works very nicely. Note that I'm not even referencing
> > org.apache stuff. And the JSTL stuff is only ever invoked
> if it fails
> > to find the Iterate tag.
> >
> > One thing I'm considering is caching the classes and
> methods so that
> > the reflection doesn't need to happen on every invokation.
> >
> > protected void prepareIndex(StringBuffer handlers, String name)
> > throws JspException {
> > int index = 0;
> > boolean found = false;
> >
> > // look for outer iterate tag
> > IterateTag iterateTag = (IterateTag)
> > findAncestorWithClass(this, IterateTag.class);
> > // Look for JSTL loops
> > if (iterateTag == null) {
> > try {
> > Class loopClass =
> > Class.forName("javax.servlet.jsp.jstl.core.LoopTagSupport");
> > Object loopTag = findAncestorWithClass(this, loopClass);
> > if (loopTag != null) {
> > Method getStatus =
> > loopClass.getDeclaredMethod("getLoopStatus",
> > null);
> > Object status = getStatus.invoke(loopTag, null);
> > Class statusClass =
> >
> > Class.forName("javax.servlet.jsp.jstl.core.LoopTagStatus");
> > Method getIndex =
> > statusClass.getDeclaredMethod("getIndex", null);
> > Integer ind = (Integer) getIndex.invoke(status,
> > null);
> > index = ind.intValue();
> > found = true;
> > }
> > }
> > catch (ClassNotFoundException ex) {}
> > catch (NoSuchMethodException ex) {}
> > catch (IllegalAccessException ex) {}
> > catch (IllegalArgumentException ex) {}
> > catch (InvocationTargetException ex) {}
> > catch (NullPointerException ex) {}
> > catch (ExceptionInInitializerError ex) {}
> > } else {
> > index = iterateTag.getIndex();
> > found = true;
> > }
> > if (!found) {
> > // this tag should only be nested in
> iteratetag, if it's
> > not, throw exception
> > JspException e = new
> > JspException(messages.getMessage("indexed.noEnclosingIterate"));
> > RequestUtils.saveException(pageContext, e);
> > throw e;
> > }
> > if (name != null)
> > handlers.append(name);
> > handlers.append("[");
> > handlers.append(index);
> > handlers.append("]");
> > if (name != null)
> > handlers.append(".");
> > }
> >
> >
> >
> > --
> > To unsubscribe, e-mail:
> <mailto:struts-dev-> [EMAIL PROTECTED]>
> > For
> additional commands,
> e-mail:
> > <mailto:[EMAIL PROTECTED]>
> >
> >
>
>
> --
> To unsubscribe, e-mail:
> <mailto:struts-dev-> [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]>