luehe       2002/07/29 16:17:49

  Modified:    jasper2/src/share/org/apache/jasper/compiler Generator.java
  Log:
  Add AT_BEGIN and NESTED scripting vars to parameter map for body fragment invocation
  
  Revision  Changes    Path
  1.48      +80 -48    
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.47
  retrieving revision 1.48
  diff -u -r1.47 -r1.48
  --- Generator.java    29 Jul 2002 19:33:07 -0000      1.47
  +++ Generator.java    29 Jul 2002 23:17:49 -0000      1.48
  @@ -705,22 +705,23 @@
        private String parent;
        private String simpleTagHandlerVar;
        private boolean isSimpleTagHandler;
  -
        private ServletWriter out;
        private MethodsBuffer methodsBuffer;
        private FragmentHelperClass fragmentHelperClass;
        private int methodNesting;
  +     private TagInfo tagInfo;
   
        /**
         * Constructor.
         */
        public GenerateVisitor(ServletWriter out, 
  -            MethodsBuffer methodsBuffer, 
  -            FragmentHelperClass fragmentHelperClass ) 
  -        {
  +                            MethodsBuffer methodsBuffer, 
  +                            FragmentHelperClass fragmentHelperClass,
  +                            TagInfo tagInfo) {
            this.out = out;
            this.methodsBuffer = methodsBuffer;
            this.fragmentHelperClass = fragmentHelperClass;
  +         this.tagInfo = tagInfo;
            methodNesting = 0;
            handlerInfos = new Hashtable();
            tagVarNumbers = new Hashtable();
  @@ -1722,13 +1723,11 @@
            String varReader = n.getAttributeValue("varReader");
            if (varReader != null) {
                out.printil("sout = new java.io.StringWriter();");
  -             out.printin("get");
  -             out.print(toUpperCaseFirstChar(n.getAttributeValue("fragment")));
  -             out.println("().invoke(sout, params);");
  +             out.print(toGetterMethod(n.getAttributeValue("fragment")));
  +             out.println(".invoke(sout, params);");
            } else {
  -             out.printin("get");
  -             out.print(toUpperCaseFirstChar(n.getAttributeValue("fragment")));
  -             out.println("().invoke(null, params);");
  +             out.print(toGetterMethod(n.getAttributeValue("fragment")));
  +             out.println(".invoke(null, params);");
            }
   
            // Store varReader in appropriate scope
  @@ -1769,7 +1768,31 @@
                n.getBody().visit(new ParamVisitor());
            }
   
  -         // XXX Add scripting variables to parameter map
  +         // Add AT_BEGIN and NESTED scripting variables to parameter map
  +         TagVariableInfo[] tagVars = tagInfo.getTagVariableInfos();
  +         if (tagVars != null) {
  +             for (int i=0; i<tagVars.length; i++) {
  +                 int scope = tagVars[i].getScope();
  +                 if (scope != VariableInfo.AT_BEGIN
  +                         && scope != VariableInfo.NESTED) {
  +                     continue;
  +                 }
  +                 out.printin("params.put(");
  +                 String name = tagVars[i].getNameGiven();
  +                 if (name != null) {
  +                     out.print(name);
  +                     out.print(", jspContext.getAttribute(");
  +                     out.print(name);
  +                     out.println(");");
  +                 } else {
  +                     String getter = 
toGetterMethod(tagVars[i].getNameFromAttribute());
  +                     out.print(getter);
  +                     out.print(", jspContext.getAttribute(");
  +                     out.print(getter);
  +                     out.println(");");
  +                 }
  +             }
  +         }
   
            // Invoke body with parameter map
            String varReader = n.getAttributeValue("varReader");
  @@ -2675,7 +2698,7 @@
        gen.generatePreamble(page);
        gen.fragmentHelperClass.generatePreamble();
        page.visit(gen.new GenerateVisitor(out, gen.methodsBuffer, 
  -                                        gen.fragmentHelperClass));
  +                                        gen.fragmentHelperClass, null));
        gen.generatePostamble(page);
       }
   
  @@ -2689,7 +2712,8 @@
                        throws JasperException {
        Generator gen = new Generator(out, compiler);
        gen.generateTagHandlerPreamble(tagInfo);
  -     page.visit(gen.new GenerateVisitor(out, gen.methodsBuffer, null));
  +     page.visit(gen.new GenerateVisitor(out, gen.methodsBuffer, null,
  +                                        tagInfo));
        gen.generateTagHandlerPostamble();
       }
   
  @@ -2783,30 +2807,28 @@
        if (attrInfos != null) {
            for (int i=0; i<attrInfos.length; i++) {
                // getter method
  -             String attrName = attrInfos[i].getName();
  -             String attrUpperCase = toUpperCaseFirstChar(attrName);
  -             out.printin("public String get");
  -             out.print(attrUpperCase);
  -             out.println("() {");
  +             out.printin("public String ");
  +             out.print(toGetterMethod(attrInfos[i].getName()));
  +             out.println(" {");
                out.pushIndent();
                out.printin("return this.");
  -             out.print(attrName);
  +             out.print(attrInfos[i].getName());
                out.println(";");
                out.popIndent();
                out.printil("}");
                out.println();
   
                // setter method
  -             out.printin("public void set");
  -             out.print(attrUpperCase);
  -             out.printin("String ");
  -             out.print(attrName);
  +             out.printin("public void ");
  +             out.print(toSetterMethodName(attrInfos[i].getName()));
  +             out.printin("(String ");
  +             out.print(attrInfos[i].getName());
                out.println(") {");
                out.pushIndent();
                out.printin("this.");
  -             out.print(attrName);
  +             out.print(attrInfos[i].getName());
                out.print(" = ");
  -             out.print(attrName);
  +             out.print(attrInfos[i].getName());
                out.println(";");
                out.popIndent();
                out.printil("}");
  @@ -2817,30 +2839,28 @@
        if (fragAttrInfos != null) {
            for (int i=0; i<fragAttrInfos.length; i++) {
                // getter method
  -             String attrName = fragAttrInfos[i].getName();
  -             String attrUpperCase = toUpperCaseFirstChar(attrName);
  -             out.printin("public javax.servlet.jsp.tagext.JspFragment get");
  -             out.print(attrUpperCase);
  -             out.println("() {");
  +             out.printin("public javax.servlet.jsp.tagext.JspFragment ");
  +             out.print(toGetterMethod(fragAttrInfos[i].getName()));
  +             out.println(" {");
                out.pushIndent();
                out.printin("return this.");
  -             out.print(attrName);
  +             out.print(fragAttrInfos[i].getName());
                out.println(";");
                out.popIndent();
                out.printil("}");
                out.println();
   
                // setter method
  -             out.printin("public void set");
  -             out.print(attrUpperCase);
  -             out.printin("javax.servlet.jsp.tagext.JspFragment ");
  -             out.print(attrName);
  +             out.printin("public void ");
  +             out.print(toSetterMethodName(fragAttrInfos[i].getName()));
  +             out.printin("(javax.servlet.jsp.tagext.JspFragment ");
  +             out.print(fragAttrInfos[i].getName());
                out.println(") {");
                out.pushIndent();
                out.printin("this.");
  -             out.print(attrName);
  +             out.print(fragAttrInfos[i].getName());
                out.print(" = ");
  -             out.print(attrName);
  +             out.print(fragAttrInfos[i].getName());
                out.println(";");
                out.popIndent();
                out.printil("}");
  @@ -2876,9 +2896,9 @@
                String attrName = attrInfos[i].getName();
                out.printin("this.jspContext.setAttribute(\"");
                out.print(attrName);
  -             out.print("\", get");
  -             out.print(toUpperCaseFirstChar(attrName));
  -             out.println("());");
  +             out.print("\", ");
  +             out.print(toGetterMethod(attrName));
  +             out.println(");");
            }
        }
   
  @@ -2890,9 +2910,9 @@
                String attrName = fragAttrInfos[i].getName();
                out.printin("this.jspContext.setAttribute(\"");
                out.print(attrName);
  -             out.print("\", get");
  -             out.print(toUpperCaseFirstChar(attrName));
  -             out.println("());");
  +             out.print("\", ");
  +             out.print(toGetterMethod(attrName));
  +             out.println(");");
            }
        }
   
  @@ -2907,10 +2927,22 @@
        }
       }
   
  -    private String toUpperCaseFirstChar(String attrName) {
  +    /*
  +     * Generates the getter method for the given attribute name.
  +     */
  +    private String toGetterMethod(String attrName) {
  +     char[] attrChars = attrName.toCharArray();
  +     attrChars[0] = Character.toUpperCase(attrChars[0]);
  +     return "get" + new String(attrChars) + "()";
  +    }
  +
  +    /*
  +     * Generates the setter method name for the given attribute name.
  +     */
  +    private String toSetterMethodName(String attrName) {
        char[] attrChars = attrName.toCharArray();
        attrChars[0] = Character.toUpperCase(attrChars[0]);
  -     return new String(attrChars);
  +     return "set" + new String(attrChars);
       }
   
       /**
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to