This patch adds a new attribute, 'indexId', to the <logic:iterate> tag which
is used to expose the current index, at each iteration, as a scripting
variable. The attribute names the desired scripting variable.
A couple of people expressed interest in this, and it turned out to be
straightforward, so I figured I'd post the patch.
--
Martin Cooper
Index: IterateTag.java
===================================================================
RCS file:
/home/cvspublic/jakarta-struts/src/share/org/apache/struts/taglib/logic/IterateTag.java,v
retrieving revision 1.11
diff -u -r1.11 IterateTag.java
--- IterateTag.java 2001/04/29 01:26:19 1.11
+++ IterateTag.java 2001/05/27 17:41:35
@@ -188,6 +188,20 @@
/**
+ * The name of the scripting variable to be exposed as the current index.
+ */
+ protected String indexId = null;
+
+ public String getIndexId() {
+ return (this.indexId);
+ }
+
+ public void setIndexId(String indexId) {
+ this.indexId = indexId;
+ }
+
+
+ /**
* The length value or attribute name (<=0 means no limit).
*/
protected String length = null;
@@ -366,6 +380,8 @@
pageContext.setAttribute(id, element);
lengthCount++;
started = true;
+ if (indexId != null)
+ pageContext.setAttribute(indexId, new Integer(getIndex()));
return (EVAL_BODY_TAG);
} else
return (SKIP_BODY);
@@ -397,6 +413,8 @@
else
pageContext.setAttribute(id, element);
lengthCount++;
+ if (indexId != null)
+ pageContext.setAttribute(indexId, new Integer(getIndex()));
return (EVAL_BODY_TAG);
} else
return (SKIP_BODY);
Index: IterateTei.java
===================================================================
RCS file:
/home/cvspublic/jakarta-struts/src/share/org/apache/struts/taglib/logic/IterateTei.java,v
retrieving revision 1.4
diff -u -r1.4 IterateTei.java
--- IterateTei.java 2001/02/12 21:49:56 1.4
+++ IterateTei.java 2001/05/27 17:41:45
@@ -87,13 +87,26 @@
String type = data.getAttributeString("type");
if (type == null)
type = "java.lang.Object";
+ VariableInfo typeInfo = new VariableInfo(
+ data.getAttributeString("id"),
+ type,
+ true,
+ VariableInfo.NESTED);
- return new VariableInfo[] {
- new VariableInfo(data.getAttributeString("id"),
- type,
- true,
- VariableInfo.NESTED)
- };
+ String indexId = data.getAttributeString("indexId");
+ VariableInfo indexIdInfo = null;
+ if (indexId != null)
+ indexIdInfo = new VariableInfo(
+ indexId,
+ "java.lang.Integer",
+ true,
+ VariableInfo.NESTED);
+
+ if (indexIdInfo == null) {
+ return new VariableInfo[] { typeInfo };
+ } else {
+ return new VariableInfo[] { typeInfo, indexIdInfo };
+ }
}
Index: struts-logic.xml
===================================================================
RCS file: /home/cvspublic/jakarta-struts/doc/struts-logic.xml,v
retrieving revision 1.6
diff -u -r1.6 struts-logic.xml
--- struts-logic.xml 2001/05/09 19:31:02 1.6
+++ struts-logic.xml 2001/05/27 17:42:22
@@ -465,6 +465,16 @@
</attribute>
<attribute>
+ <name>indexId</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <info>
+ <p>The name of a page scope JSP bean that will contain the current
+ index of the collection on each iteration.</p>
+ </info>
+ </attribute>
+
+ <attribute>
<name>length</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>