Author: musachy
Date: Mon Nov 16 18:35:06 2009
New Revision: 880897
URL: http://svn.apache.org/viewvc?rev=880897&view=rev
Log:
WW-3332 Add "escapeXml" and "escapeCsv" to the "property" tag
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Property.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/PropertyTag.java
struts/struts2/trunk/core/src/site/resources/tags/property.html
struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/PropertyTagTest.java
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Property.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Property.java?rev=880897&r1=880896&r2=880897&view=diff
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Property.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Property.java
Mon Nov 16 18:35:06 2009
@@ -102,6 +102,8 @@
private String value;
private boolean escape = true;
private boolean escapeJavaScript = false;
+ private boolean escapeXml = false;
+ private boolean escapeCsv = false;
@StrutsTagAttribute(description="The default value to be used if
<u>value</u> attribute is null")
public void setDefault(String defaultValue) {
@@ -123,6 +125,20 @@
this.value = value;
}
+ public void setDefaultValue(String defaultValue) {
+ this.defaultValue = defaultValue;
+ }
+
+ @StrutsTagAttribute(description="Whether to escape CSV (useful to escape a
value for a column)", type="Boolean", defaultValue="false")
+ public void setEscapeCsv(boolean escapeCsv) {
+ this.escapeCsv = escapeCsv;
+ }
+
+ @StrutsTagAttribute(description="Whether to escape XML", type="Boolean",
defaultValue="false")
+ public void setEscapeXml(boolean escapeXml) {
+ this.escapeXml = escapeXml;
+ }
+
public boolean start(Writer writer) {
boolean result = super.start(writer);
@@ -161,6 +177,13 @@
if (escapeJavaScript) {
result = StringEscapeUtils.escapeJavaScript(result);
}
+ if (escapeXml) {
+ result = StringEscapeUtils.escapeXml(result);
+ }
+ if (escapeCsv) {
+ result = StringEscapeUtils.escapeCsv(result);
+ }
+
return result;
}
}
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/PropertyTag.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/PropertyTag.java?rev=880897&r1=880896&r2=880897&view=diff
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/PropertyTag.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/PropertyTag.java
Mon Nov 16 18:35:06 2009
@@ -41,6 +41,8 @@
private String value;
private boolean escape = true;
private boolean escapeJavaScript = false;
+ private boolean escapeXml = false;
+ private boolean escapeCsv = false;
public Component getBean(ValueStack stack, HttpServletRequest req,
HttpServletResponse res) {
return new Property(stack);
@@ -54,6 +56,8 @@
tag.setValue(value);
tag.setEscape(escape);
tag.setEscapeJavaScript(escapeJavaScript);
+ tag.setEscapeXml(escapeXml);
+ tag.setEscapeCsv(escapeCsv);
}
public void setDefault(String defaultValue) {
@@ -71,4 +75,16 @@
public void setValue(String value) {
this.value = value;
}
+
+ public void setDefaultValue(String defaultValue) {
+ this.defaultValue = defaultValue;
+ }
+
+ public void setEscapeCsv(boolean escapeCsv) {
+ this.escapeCsv = escapeCsv;
+ }
+
+ public void setEscapeXml(boolean escapeXml) {
+ this.escapeXml = escapeXml;
+ }
}
Modified: struts/struts2/trunk/core/src/site/resources/tags/property.html
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/site/resources/tags/property.html?rev=880897&r1=880896&r2=880897&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/site/resources/tags/property.html (original)
+++ struts/struts2/trunk/core/src/site/resources/tags/property.html Mon Nov 16
18:35:06 2009
@@ -50,6 +50,14 @@
<td align="left" valign="top"> Whether
to escape HTML</td>
</tr>
<tr>
+ <td align="left"
valign="top">escapeCsv</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top">false</td>
+ <td align="left"
valign="top">Boolean</td>
+ <td align="left" valign="top">Whether
to escape CSV</td>
+ </tr>
+ <tr>
<td align="left"
valign="top">escapeJavaScript</td>
<td align="left" valign="top">false</td>
<td align="left" valign="top">false</td>
@@ -58,6 +66,14 @@
<td align="left" valign="top">Whether
to escape Javascript</td>
</tr>
<tr>
+ <td align="left"
valign="top">escapeXml</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top">false</td>
+ <td align="left"
valign="top">Boolean</td>
+ <td align="left" valign="top">Whether
to escape XML</td>
+ </tr>
+ <tr>
<td align="left" valign="top">value</td>
<td align="left" valign="top">false</td>
<td align="left" valign="top"><top
of stack></td>
Modified:
struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/PropertyTagTest.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/PropertyTagTest.java?rev=880897&r1=880896&r2=880897&view=diff
==============================================================================
---
struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/PropertyTagTest.java
(original)
+++
struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/PropertyTagTest.java
Mon Nov 16 18:35:06 2009
@@ -223,6 +223,66 @@
pageContext.verify();
}
+ public void testEscapeXml() throws Exception {
+ // setups
+ initDispatcher(new HashMap() {{
put(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "true");}});
+
+ Foo foo = new Foo();
+ foo.setTitle("<>'\"&");
+ stack.push(foo);
+
+ MockJspWriter jspWriter = new MockJspWriter();
+ jspWriter.setExpectedData("Foo is: <>'"&");
+
+ MockPageContext pageContext = new MockPageContext();
+ pageContext.setJspWriter(jspWriter);
+ pageContext.setRequest(request);
+
+ // test
+ {PropertyTag tag = new PropertyTag();
+ tag.setEscape(false);
+ tag.setEscapeXml(true);
+ tag.setPageContext(pageContext);
+ tag.setValue("%{toString()}");
+ tag.doStartTag();
+ tag.doEndTag();}
+
+ // verify test
+ request.verify();
+ jspWriter.verify();
+ pageContext.verify();
+ }
+
+ public void testEscapeCsv() throws Exception {
+ // setups
+ initDispatcher(new HashMap() {{
put(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "true");}});
+
+ Foo foo = new Foo();
+ foo.setTitle("\"something,\",\"");
+ stack.push(foo);
+
+ MockJspWriter jspWriter = new MockJspWriter();
+ jspWriter.setExpectedData("\"Foo is: \"\"something,\"\",\"\"\"");
+
+ MockPageContext pageContext = new MockPageContext();
+ pageContext.setJspWriter(jspWriter);
+ pageContext.setRequest(request);
+
+ // test
+ {PropertyTag tag = new PropertyTag();
+ tag.setEscape(false);
+ tag.setEscapeCsv(true);
+ tag.setPageContext(pageContext);
+ tag.setValue("%{toString()}");
+ tag.doStartTag();
+ tag.doEndTag();}
+
+ // verify test
+ request.verify();
+ jspWriter.verify();
+ pageContext.verify();
+ }
+
public void testWithAltSyntax2() throws Exception {
// setups
initDispatcher(new HashMap() {{
put(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "true");}});