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]>