From cdc9f2733bd55f264999e25cf3b899664466b4f4 Mon Sep 17 00:00:00 2001 From: remm Date: Fri, 27 Oct 2006 00:24:37 +0000 Subject: [PATCH] - Implement the JspIdConsumer feature. 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 | 15 ++++++++++++--- java/org/apache/jasper/compiler/Node.java | 6 ++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/java/org/apache/jasper/compiler/Generator.java b/java/org/apache/jasper/compiler/Generator.java index 2bb370e74..457188e43 100644 --- a/java/org/apache/jasper/compiler/Generator.java +++ b/java/org/apache/jasper/compiler/Generator.java @@ -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 diff --git a/java/org/apache/jasper/compiler/Node.java b/java/org/apache/jasper/compiler/Node.java index f80a271e0..6c5408973 100644 --- a/java/org/apache/jasper/compiler/Node.java +++ b/java/org/apache/jasper/compiler/Node.java @@ -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: -- 2.11.0