luehe       2002/10/31 18:09:15

  Modified:    jasper2/src/share/org/apache/jasper/compiler Generator.java
  Log:
  - All variable synchronization and restoration that
    occurs at the end of a tag file must occur regardless of whether
    an exception is thrown inside the tag file.
  
  - All variable synchronization that occurs after the invocation
    of a fragment must occur regardless of whether an exception
    occured while invoking the fragment.
  
  Revision  Changes    Path
  1.115     +30 -17    
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.114
  retrieving revision 1.115
  diff -u -r1.114 -r1.115
  --- Generator.java    31 Oct 2002 02:11:40 -0000      1.114
  +++ Generator.java    1 Nov 2002 02:09:15 -0000       1.115
  @@ -1831,17 +1831,22 @@
            String varAttr = n.getTextAttribute("var");
            if (varReaderAttr != null || varAttr != null) {
                out.printil("_jspx_sout = new java.io.StringWriter();");
  -             out.printin(toGetterMethod(n.getTextAttribute("fragment")));
  -             out.println(".invoke(_jspx_sout);");
            } else {
  -             out.printin(toGetterMethod(n.getTextAttribute("fragment")));
  -             out.println(".invoke(null);");
  +             out.printil("_jspx_sout = null;");
            }
  -
  +         out.printil("try {");
  +         out.pushIndent();
  +         out.printin(toGetterMethod(n.getTextAttribute("fragment")));
  +         out.println(".invoke(_jspx_sout);");
  +         out.popIndent();
  +         out.printil( "} finally {" );
  +         out.pushIndent();
            // Copy page scope of invoking page back to virtual page scope of
            // tag file
            out.printil("((org.apache.jasper.runtime.JspContextWrapper) 
jspContext).copyPageToTagScope(javax.servlet.jsp.tagext.VariableInfo.NESTED);");
            out.printil("((org.apache.jasper.runtime.JspContextWrapper) 
jspContext).copyPageToTagScope(javax.servlet.jsp.tagext.VariableInfo.AT_BEGIN);");
  +         out.popIndent();
  +         out.printil("}");
   
            // Store varReader in appropriate scope
            if (varReaderAttr != null || varAttr != null) {
  @@ -1874,15 +1879,21 @@
            String varAttr = n.getTextAttribute("var");
            if (varReaderAttr != null || varAttr != null) {
                out.printil("_jspx_sout = new java.io.StringWriter();");
  -             out.printil("getJspBody().invoke(_jspx_sout);");
            } else {
  -             out.printil("getJspBody().invoke(null);");
  +             out.printil("_jspx_sout = null;");
            }
  -
  +         out.printil("try {");
  +         out.pushIndent();
  +         out.printil("getJspBody().invoke(_jspx_sout);");
  +         out.popIndent();
  +         out.printil( "} finally {" );
  +         out.pushIndent();
            // Copy page scope of invoking page back to virtual page scope of
            // tag file
            out.printil("((org.apache.jasper.runtime.JspContextWrapper) 
jspContext).copyPageToTagScope(javax.servlet.jsp.tagext.VariableInfo.NESTED);");
            out.printil("((org.apache.jasper.runtime.JspContextWrapper) 
jspContext).copyPageToTagScope(javax.servlet.jsp.tagext.VariableInfo.AT_BEGIN);");
  +         out.popIndent();
  +         out.printil("}");
   
            // Store varReader in appropriate scope
            if (varReaderAttr != null || varAttr != null) {
  @@ -2941,11 +2952,7 @@
        out.pushIndent();
       }
   
  -    private void generateTagHandlerPostamble( TagInfo tagInfo ) {
  -     out.printil("((org.apache.jasper.runtime.JspContextWrapper) 
jspContext).copyTagToPageScope(javax.servlet.jsp.tagext.VariableInfo.AT_BEGIN);");
  -     out.printil("((org.apache.jasper.runtime.JspContextWrapper) 
jspContext).copyTagToPageScope(javax.servlet.jsp.tagext.VariableInfo.AT_END);");
  -     out.printil("((org.apache.jasper.runtime.JspContextWrapper) 
jspContext).restoreNestedVariables();");
  -        
  +    private void generateTagHandlerPostamble( TagInfo tagInfo ) {        
           out.popIndent();
           
           // Have to catch Throwable because a classic tag handler
  @@ -2960,8 +2967,14 @@
           out.printil( "    throw (javax.servlet.jsp.JspException) t;" );
           out.printil("throw new javax.servlet.jsp.JspException(t);" );
           out.popIndent();
  +        out.printil( "} finally {" );
  +        out.pushIndent();
  +     out.printil("((org.apache.jasper.runtime.JspContextWrapper) 
jspContext).copyTagToPageScope(javax.servlet.jsp.tagext.VariableInfo.AT_BEGIN);");
  +     out.printil("((org.apache.jasper.runtime.JspContextWrapper) 
jspContext).copyTagToPageScope(javax.servlet.jsp.tagext.VariableInfo.AT_END);");
  +     out.printil("((org.apache.jasper.runtime.JspContextWrapper) 
jspContext).restoreNestedVariables();");
  +        out.popIndent();
           out.printil( "}" );
  -        
  +
           // Close the doTag method
           out.popIndent();
           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>

Reply via email to