dgraham     2002/11/19 21:56:08

  Modified:    src/share/org/apache/struts/taglib/html
                        JavascriptValidatorTag.java
  Log:
  Enclose script in CDATA section when rendering as xhtml.  This prevents xml
  clients from misinterpreting script characters like < and &.
  
  Revision  Changes    Path
  1.17      +30 -7     
jakarta-struts/src/share/org/apache/struts/taglib/html/JavascriptValidatorTag.java
  
  Index: JavascriptValidatorTag.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/JavascriptValidatorTag.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- JavascriptValidatorTag.java       16 Nov 2002 06:05:21 -0000      1.16
  +++ JavascriptValidatorTag.java       20 Nov 2002 05:56:08 -0000      1.17
  @@ -510,13 +510,20 @@
           src = null;
       }
   
  +    /**
  +     * Returns the opening script element and some initial javascript.
  +     */
       protected String getJavascriptBegin(String methods) {
           StringBuffer sb = new StringBuffer();
           String name =
               formName.substring(0, 1).toUpperCase() + formName.substring(1, 
formName.length());
   
           sb.append(this.getStartElement());
  -
  +        
  +        if (this.isXhtml()) {
  +            sb.append("<![CDATA[\r\n");
  +        }
  +        
           if ("true".equals(htmlComment))
               sb.append(htmlBeginComment);
           sb.append("\n     var bCancel = false; \n\n");
  @@ -566,12 +573,21 @@
           return sb.toString();
       }
   
  +    /**
  +     * Returns the closing script element.
  +     */
       protected String getJavascriptEnd() {
           StringBuffer sb = new StringBuffer();
   
           sb.append("\n");
  -        if ("true".equals(htmlComment))
  +        if ("true".equals(htmlComment)){
               sb.append(htmlEndComment);
  +        }
  +        
  +         if (this.isXhtml()) {
  +            sb.append("]]>\r\n");
  +        }
  +        
           sb.append("</script>\n\n");
   
           return sb.toString();
  @@ -632,10 +648,7 @@
           StringBuffer start = new StringBuffer("<script type=\"text/javascript\"");
   
           // there is no language attribute in xhtml
  -        String xhtml =
  -            (String) this.pageContext.getAttribute(Globals.XHTML_KEY, 
this.pageContext.PAGE_SCOPE);
  -        
  -        if (!("true".equalsIgnoreCase(xhtml))) {
  +        if (!this.isXhtml()) {
               start.append(" language=\"Javascript1.1\"");
           }
   
  @@ -645,6 +658,16 @@
   
           start.append("> \n");
           return start.toString();
  +    }
  +    
  +    /**
  +     * Returns true if this is an xhtml page.
  +     */
  +    private boolean isXhtml() {
  +        String xhtml =
  +            (String) this.pageContext.getAttribute(Globals.XHTML_KEY, 
this.pageContext.PAGE_SCOPE);
  +
  +        return ("true".equalsIgnoreCase(xhtml));
       }
   
   }
  
  
  

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

Reply via email to