Author: jboynes
Date: Sun Feb 10 19:10:57 2013
New Revision: 1444585

URL: http://svn.apache.org/r1444585
Log:
fix for #54544 where loop variables are not reset when the tag is recycled

Modified:
    
tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tag/common/core/ForTokensSupport.java
    
tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/core/LoopTagSupport.java

Modified: 
tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tag/common/core/ForTokensSupport.java
URL: 
http://svn.apache.org/viewvc/tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tag/common/core/ForTokensSupport.java?rev=1444585&r1=1444584&r2=1444585&view=diff
==============================================================================
--- 
tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tag/common/core/ForTokensSupport.java
 (original)
+++ 
tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tag/common/core/ForTokensSupport.java
 Sun Feb 10 19:10:57 2013
@@ -19,7 +19,6 @@ package org.apache.taglibs.standard.tag.
 
 import java.util.StringTokenizer;
 
-import javax.el.ELContext;
 import javax.el.ValueExpression;
 import javax.servlet.jsp.JspTagException;
 import javax.servlet.jsp.jstl.core.IteratedExpression;
@@ -57,7 +56,7 @@ public abstract class ForTokensSupport e
     protected Object items;                       // 'items' attribute
     protected String delims;                      // 'delims' attribute
     protected StringTokenizer st;                 // digested tokenizer
-    protected int currentIndex = 0;
+    protected int currentIndex;
     private IteratedExpression itemsValueIteratedExpression;
 
 
@@ -73,8 +72,10 @@ public abstract class ForTokensSupport e
     protected void prepare() throws JspTagException {
         if (items instanceof ValueExpression) {
             deferredExpression = (ValueExpression) items;
-            ELContext myELContext = pageContext.getELContext();
-            Object originalValue = deferredExpression.getValue(myELContext);
+            itemsValueIteratedExpression = new 
IteratedExpression(deferredExpression, getDelims());
+            currentIndex = 0;
+
+            Object originalValue = 
deferredExpression.getValue(pageContext.getELContext());
             if (originalValue instanceof String) {
                 st = new StringTokenizer((String) originalValue, delims);
             } else {
@@ -94,12 +95,7 @@ public abstract class ForTokensSupport e
     protected Object next() throws JspTagException {
         if (deferredExpression != null) {
             st.nextElement();
-            if (itemsValueIteratedExpression == null) {
-                itemsValueIteratedExpression = new 
IteratedExpression(deferredExpression, getDelims());
-            }
-            ValueExpression nextValue = new 
IteratedValueExpression(itemsValueIteratedExpression, currentIndex);
-            currentIndex++;
-            return nextValue;
+            return new IteratedValueExpression(itemsValueIteratedExpression, 
currentIndex++);
         } else {
             return st.nextElement();
         }

Modified: 
tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/core/LoopTagSupport.java
URL: 
http://svn.apache.org/viewvc/tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/core/LoopTagSupport.java?rev=1444585&r1=1444584&r2=1444585&view=diff
==============================================================================
--- 
tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/core/LoopTagSupport.java
 (original)
+++ 
tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/core/LoopTagSupport.java
 Sun Feb 10 19:10:57 2013
@@ -115,7 +115,7 @@ public abstract class LoopTagSupport
      */
     protected String itemId, statusId;
 
-    protected ValueExpression deferredExpression = null;
+    protected ValueExpression deferredExpression;
 
     //*********************************************************************
     // 'Private' state (implementation details)
@@ -509,6 +509,7 @@ public abstract class LoopTagSupport
         beginSpecified = false; // not specified until it's specified :-)
         endSpecified = false;   // (as above)
         stepSpecified = false;  // (as above)
+        deferredExpression = null;
 
         // defaults for interface with page author
         begin = 0;              // when not specified, 'begin' is 0 by spec.



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to