jstrachan    01/08/09 08:00:09

  Modified:    xtags/src/org/apache/taglibs/xtags/xslt StyleTag.java
  Added:       xtags/examples/web/testStyle first.xsl second.xsl
                        test_style.jsp
  Log:
  Added patch to allow <xtags:style> tag to be used inside another custom tag (or 
pipelined together). Also added a test case kindly supplied by Martin Brown - many 
thanks Martin!
  
  Revision  Changes    Path
  1.1                  jakarta-taglibs/xtags/examples/web/testStyle/first.xsl
  
  Index: first.xsl
  ===================================================================
  <?xml version="1.0"?>
  
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
  
  <xsl:output method="xml" indent="no"/>
  <xsl:strip-space elements="*"/>
  
  <xsl:template match="//level1">
    <xsl:copy-of select="."/>
  </xsl:template>
  
  </xsl:stylesheet>
  
  
  1.1                  jakarta-taglibs/xtags/examples/web/testStyle/second.xsl
  
  Index: second.xsl
  ===================================================================
  <?xml version="1.0"?>
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
  
  <xsl:output method="xml" indent="no"/>
  <xsl:strip-space elements="*"/>
  
  <xsl:template match="//level2">
    <xsl:copy-of select="."/>
  </xsl:template>
  
  </xsl:stylesheet>
  
  
  
  1.1                  jakarta-taglibs/xtags/examples/web/testStyle/test_style.jsp
  
  Index: test_style.jsp
  ===================================================================
  <!doctype html public "-//w3c//dtd html 4.0 transitional//en">
  <html>
  <%@ taglib uri="http://jakarta.apache.org/taglibs/xtags-1.0"; prefix="xtags" %>
  <%--
  
  This test case was supplied by Martin Brown - many thanks!
  
  --%>
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  <title>Test Stylesheet pilelining</title>
  <link rel="stylesheet" href="../examples.css" type="text/css">
  </head>
  
  <body>
  
  <h1>Test Stylesheet pilelining</h1>
  
  <BR>
  Output from attempt 1
  <BR>
  
  
  <xtags:style xsl="second.xsl">
  
  <xtags:style xsl="first.xsl">
  <root><level1><level2><level3>data</level3></level2></level1></root>
  </xtags:style>
  
  </xtags:style>
  
  <hr/>
  
  </body>
  </html>
  
  
  
  1.3       +21 -2     
jakarta-taglibs/xtags/src/org/apache/taglibs/xtags/xslt/StyleTag.java
  
  Index: StyleTag.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-taglibs/xtags/src/org/apache/taglibs/xtags/xslt/StyleTag.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- StyleTag.java     2001/08/08 15:39:04     1.2
  +++ StyleTag.java     2001/08/09 15:00:09     1.3
  @@ -66,6 +66,7 @@
   import java.io.OutputStream;
   import java.io.Reader;
   import java.io.StringReader;
  +import java.io.StringWriter;
   import java.io.Writer;
   import java.net.MalformedURLException;
   import java.net.URL;
  @@ -121,7 +122,10 @@
   
       /** XSLT parameters */
       private Map parameters;
  -        
  +    
  +    /** Indirection buffer, used to avoid flush problems with BodyContent */
  +    private StringWriter stringWriter;
  +    
       
       // ParameterAcceptingTag interface
       //-------------------------------------------------------------------------     
           
  @@ -191,10 +195,19 @@
               Transformer transformer = factory.newTransformer(style);
               configure(transformer);
               transformer.transform( data, result );
  +            if ( stringWriter != null ) {
  +                pageContext.getOut().write( stringWriter.toString() );
  +            }
           } 
           catch (TransformerException e) {
               handleException(e);
           }
  +        catch (IOException e) {
  +            handleException(e);
  +        }
  +        finally {
  +            stringWriter = null;
  +        }
        return EVAL_PAGE;
       }
   
  @@ -344,7 +357,12 @@
         */
       protected Result getResult() throws JspException {
           if ( result == null ) {
  -            return new StreamResult( pageContext.getOut() );
  +            // use StringWriter to avoid flushing problems with BodyContent
  +            stringWriter = new StringWriter();
  +            return new StreamResult( stringWriter );
  +        }
  +        else {
  +            stringWriter = null;
           }
           return result;
       }
  @@ -357,6 +375,7 @@
           }
           else {
               pageContext.getServletContext().log( e.getMessage(), e );
  +            e.printStackTrace();
               throw new JspException( e.getMessage() );
           }
       }
  
  
  

Reply via email to