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">&lt;top 
of stack&gt;</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: &lt;&gt;&apos;&quot;&amp;");
+
+        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");}});


Reply via email to