+1 for me.
This must be one of the most frequent issues that comes up on struts-user,
and so far the choice has been - customise strust tags yourself or
scriptlets.
Niall
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
> Sent: 06 July 2001 18:31
> To: [EMAIL PROTECTED]
> Subject: Indexed tags - proposal to add changes
>
>
>
>
> Hi everyone.
>
> I have been posting to the user list for some time now regarding creating
> indexed names within an iterate tag. From feedback from that
> list, this seems
> to be an important addition to the current tags.
>
> While looking to write my own additional tags which would do this (eg
> html:indexedText etc), I discovered that this functionality could
> easily be
> added to the current tags, now that the getIndex() method is available, by
> creating an extra parameter 'indexed' which when set to true
> would create the
> indexed names. The necessary additions to current code were
> small and quite
> clean, as follows:
>
> - added 'indexed' as a parameter in BaseHandlerTag, with appropriate
> setter/getter
> - added if statement which checks for 'indexed=true', and if so,
> appends "[x]"
> to the name, before appending property eg myProperty[x].value.
> This was added to BaseFieldTag (to cover tags which extend this) and
> CheckBoxTag, & SelectTag
> as follows:
> //if "indexed=true" parameter, create indexed name for this tag eg
> name="myCollection[x].myproperty"
> if ("true".equals(indexed))
> {
> // look for outer iterate tag
> IterateTag iterateTag = (IterateTag) findAncestorWithClass(this,
> IterateTag.class);
> if (iterateTag == null)
> {
> // this tag should only be nested in iteratetag, if it's
> not, don't do
> anything
> return EVAL_PAGE;
> }
>
> results.append(getName());
> results.append("[");
> results.append(iterateTag.getIndex());
> results.append("].");
> }
>
> - Slight variations were added to SubmitTag and ButtonTag to
> simply add index to
> it's name ie mySubmit[x].
> - linkTag was somewhat different due to its nature. I added if
> statement to add
> "index=x" as a parameter to the link's querystring ie
> myAction.do?index=1 or
> myAction.do?param1=37&index=1, as follows:
> //if "indexed=true", add "index=x" parameter to query string
> if ("true".equals(indexed))
> {
> // look for outer iterate tag
> IterateTag iterateTag = (IterateTag)
> findAncestorWithClass(this,
> IterateTag.class);
> if (iterateTag == null)
> {
> // this tag should only be nested in iteratetag,
> if it's not,
> don't do anything
> System.out.println("couldn't find enclosing iterate tag");
> return EVAL_PAGE;
> }
>
> //calculate index, and add as a parameter
> if (params == null)
> {
> params = new HashMap(); //create new
> HashMap if no
> other params
> }
> params.put("index", "" + iterateTag.getIndex());
> }
> - minimal changes to struts-html.tld to add 'indexed' as param.
>
> All of this code has been available at Ted's site for a while,
> and I would like
> to suggest it is added to the Struts source. Numerous people are
> already using
> it, and I believe many more would if it was part of the build.
>
> Would appreciate your feedback, and not sure what happens next
> (just joined this
> list)!
>
> Cheers,
>
> Dave
>
> PS code attached(See attached file: struts indexed files.ZIP)
>
>
>
>