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");}});