luehe 2002/11/06 14:44:58 Modified: jasper2/src/share/org/apache/jasper/compiler Generator.java Log: Fixed 14273: Unable to invoke a fragment within a tag in a tag file + some reorg in generated tag handler file Revision Changes Path 1.120 +49 -52 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java Index: Generator.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v retrieving revision 1.119 retrieving revision 1.120 diff -u -r1.119 -r1.120 --- Generator.java 6 Nov 2002 18:47:13 -0000 1.119 +++ Generator.java 6 Nov 2002 22:44:58 -0000 1.120 @@ -2862,7 +2862,7 @@ } /* - * XXX + * Generates tag handler preamble. */ private void generateTagHandlerPreamble(TagInfo tagInfo, Node.Nodes tag ) throws JasperException @@ -2881,15 +2881,15 @@ // Generate class declaration out.printin("public final class "); - out.print(tagInfo.getTagName()); - out.println(" extends javax.servlet.jsp.tagext.SimpleTagSupport"); + out.println(tagInfo.getTagName()); + out.printil(" extends javax.servlet.jsp.tagext.SimpleTagSupport"); /* Supress until we also implement resolveFunction() out.printil(" implements "javax.servlet.jsp.el.FunctionMapper, "); */ out.printin(" implements org.apache.jasper.runtime.JspSourceDependent"); if (tagInfo.hasDynamicAttributes()) { out.println(","); - out.printin(" javax.servlet.jsp.tagext.DynamicAttributes"); + out.printin(" javax.servlet.jsp.tagext.DynamicAttributes"); } out.println(" {"); out.println(); @@ -2904,12 +2904,19 @@ // Static initializations here genPreambleStaticInitializers(); + out.printil("private JspContext jspContext;"); + + // Declare writer used for storing result of fragment/body invocation + // if 'varReader' or 'var' attribute is specified + out.printil("private java.io.Writer _jspx_sout;"); + // Class variable declarations genPreambleClassVariableDeclarations( tagInfo.getTagName() ); - // Tag-handler specific declarations: - generateTagHandlerDeclarations(tagInfo); + generateSetJspContext(tagInfo); + // Tag-handler specific declarations + generateTagHandlerAttributes(tagInfo); if (tagInfo.hasDynamicAttributes()) generateSetDynamicAttribute(); @@ -2946,10 +2953,6 @@ out.printil("javax.servlet.ServletConfig config = " + "pageContext.getServletConfig();"); - // Declare writer used for storing result of fragment/body invocation - // if 'varReader' or 'var' attribute is specified - out.printil("java.io.Writer _jspx_sout = null;"); - out.printil("javax.servlet.jsp.JspWriter out = jspContext.getOut();"); generatePageScopedVariables(tagInfo); @@ -2999,16 +3002,15 @@ * Generates declarations for tag handler attributes, and defines the * getter and setter methods for each. */ - private void generateTagHandlerDeclarations(TagInfo tagInfo) + private void generateTagHandlerAttributes(TagInfo tagInfo) throws JasperException { if (tagInfo.hasDynamicAttributes()) { out.printil("java.util.HashMap dynamicAttrs = new java.util.HashMap();"); } - TagAttributeInfo[] attrInfos = tagInfo.getAttributes(); - // Declare attributes + TagAttributeInfo[] attrInfos = tagInfo.getAttributes(); for (int i=0; i<attrInfos.length; i++) { out.printin("private "); if (attrInfos[i].isFragment()) { @@ -3066,53 +3068,48 @@ out.println(); } } - - // Define setter for JspContext so we can create a wrapper and - // store both the original and the wrapper. We need the wrapper - // to mask the page context from the tag file and simulate a - // fresh page context. We need the original to do things like - // sync AT_BEGIN and AT_END scripting variables. - out.printil( "private JspContext jspContext;" ); - out.println(); - out.printil( "public void setJspContext( JspContext ctx ) {" ); - out.pushIndent(); - out.printil( "super.setJspContext(ctx);" ); + } + /* + * Generate setter for JspContext so we can create a wrapper and + * store both the original and the wrapper. We need the wrapper + * to mask the page context from the tag file and simulate a + * fresh page context. We need the original to do things like + * sync AT_BEGIN and AT_END scripting variables. + */ + private void generateSetJspContext(TagInfo tagInfo) { + out.printil("public void setJspContext( JspContext ctx ) {"); + out.pushIndent(); + out.printil("super.setJspContext(ctx);"); out.printil("java.util.Vector _jspx_nested = new java.util.Vector();"); out.printil("java.util.Vector _jspx_at_begin = new java.util.Vector();"); out.printil("java.util.Vector _jspx_at_end = new java.util.Vector();"); TagVariableInfo[] tagVars = tagInfo.getTagVariableInfos(); for (int i=0; i<tagVars.length; i++) { - String name = tagVars[i].getNameGiven(); - /* XXX - if (name == null) { - name = toGetterMethod(tagVars[i].getNameFromAttribute()); - } - */ - switch(tagVars[i].getScope()) { - case VariableInfo.NESTED: - out.printin("_jspx_nested.addElement("); - break; - case VariableInfo.AT_BEGIN: - out.printin("_jspx_at_begin.addElement("); - break; - case VariableInfo.AT_END: - out.printin("_jspx_at_end.addElement("); - break; - } // switch - - out.print(quote(name)); - out.println(");"); + switch(tagVars[i].getScope()) { + case VariableInfo.NESTED: + out.printin("_jspx_nested.addElement("); + break; + case VariableInfo.AT_BEGIN: + out.printin("_jspx_at_begin.addElement("); + break; + case VariableInfo.AT_END: + out.printin("_jspx_at_end.addElement("); + break; + } // switch + + out.print(quote(tagVars[i].getNameGiven())); + out.println(");"); } - out.printil( "this.jspContext = new org.apache.jasper.runtime.JspContextWrapper(ctx, _jspx_nested, _jspx_at_begin, _jspx_at_end);" ); + out.printil("this.jspContext = new org.apache.jasper.runtime.JspContextWrapper(ctx, _jspx_nested, _jspx_at_begin, _jspx_at_end);"); out.popIndent(); - out.printil( "}" ); + out.printil("}"); out.println(); - out.printil( "public JspContext getJspContext() {" ); + out.printil("public JspContext getJspContext() {"); out.pushIndent(); - out.printil( "return this.jspContext;" ); + out.printil("return this.jspContext;"); out.popIndent(); - out.printil( "}" ); + out.printil("}"); } /*
-- To unsubscribe, e-mail: <mailto:tomcat-dev-unsubscribe@;jakarta.apache.org> For additional commands, e-mail: <mailto:tomcat-dev-help@;jakarta.apache.org>