- Implement the JspIdConsumer feature.
authorremm <remm@13f79535-47bb-0310-9956-ffa450edef68>
Fri, 27 Oct 2006 00:24:37 +0000 (00:24 +0000)
committerremm <remm@13f79535-47bb-0310-9956-ffa450edef68>
Fri, 27 Oct 2006 00:24:37 +0000 (00:24 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@468205 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/jasper/compiler/Generator.java
java/org/apache/jasper/compiler/Node.java

index 2bb370e..457188e 100644 (file)
@@ -35,6 +35,7 @@ import java.util.Vector;
 
 import javax.el.MethodExpression;
 import javax.el.ValueExpression;
+import javax.servlet.jsp.tagext.JspIdConsumer;
 import javax.servlet.jsp.tagext.TagAttributeInfo;
 import javax.servlet.jsp.tagext.TagInfo;
 import javax.servlet.jsp.tagext.TagVariableInfo;
@@ -2151,7 +2152,7 @@ class Generator {
             out.print(" ");
             out.print(tagHandlerVar);
             out.print(" = ");
-            if (isPoolingEnabled) {
+            if (isPoolingEnabled && !(JspIdConsumer.class.isAssignableFrom(tagHandlerClass))) {
                 out.print("(");
                 out.print(tagHandlerClassName);
                 out.print(") ");
@@ -2305,7 +2306,7 @@ class Generator {
                     .println(".doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) {");
             out.pushIndent();
             if (!n.implementsTryCatchFinally()) {
-                if (isPoolingEnabled) {
+                if (isPoolingEnabled && !(JspIdConsumer.class.isAssignableFrom(n.getTagHandlerClass()))) {
                     out.printin(n.getTagHandlerPoolName());
                     out.print(".reuse(");
                     out.print(tagHandlerVar);
@@ -2835,7 +2836,7 @@ class Generator {
                         sb.append(getJspContextVar());
                         sb.append(".getELContext()");
                         sb.append(")");
-                    } 
+                    }
                     attrValue = sb.toString();
                 } else if (attr.isDeferredMethodInput()
                         || MethodExpression.class.getName().equals(type)) {
@@ -2925,6 +2926,14 @@ class Generator {
                 TagHandlerInfo handlerInfo, boolean simpleTag)
                 throws JasperException {
 
+            // Set the id of the tag
+            if (JspIdConsumer.class.isAssignableFrom(n.getTagHandlerClass())) {
+                out.printin(tagHandlerVar);
+                out.print(".setJspId(\"");
+                out.print(n.getId());
+                out.println("\");");
+            }
+            
             // Set context
             if (simpleTag) {
                 // Generate alias map
index f80a271..6c54089 100644 (file)
@@ -1354,6 +1354,8 @@ abstract class Node implements TagConstants {
      */
     public static class CustomTag extends Node {
 
+        private static int id = 0;
+        
         private String uri;
 
         private String prefix;
@@ -1624,6 +1626,10 @@ abstract class Node implements TagConstants {
             return this.numCount;
         }
 
+        public String getId() {
+            return "_" + (++id);
+        }
+        
         public void setScriptingVars(Vector vec, int scope) {
             switch (scope) {
             case VariableInfo.AT_BEGIN: