dev@javaserverfaces.java.net

Seeking Review [NEW] add escape attribute to Label renderer

From: Ed Burns <Ed.Burns_at_Sun.COM>
Date: Wed, 16 Feb 2005 15:04:32 -0800

[NEW] add escape attribute to Label renderer.

CRAIG: ok with this resolution?

SECTION: API Changes

M jsf-api/doc/output-label-attrs.xml
M jsf-api/doc/output-label-props.xml

- add escape attribute. Defaults to "false" for compatability with
  existing implementation.

M jsf-api/doc/standard-html-renderkit.xml

- output of executing create.standard.xml

SECTION: RI Changes

M jsf-ri/src/com/sun/faces/renderkit/html_basic/LabelRenderer.java

- honor the "escape" attribute, if present

M jsf-ri/web/test/RenderResponse_correct
M jsf-ri/web/test/TestRenderResponsePhase.jsp

- new test content

SECTION: API Diffs

Index: jsf-api/doc/output-label-attrs.xml
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-api/doc/output-label-attrs.xml,v
retrieving revision 1.5
diff -u -r1.5 output-label-attrs.xml
--- jsf-api/doc/output-label-attrs.xml 8 Nov 2004 19:23:00 -0000 1.5
+++ jsf-api/doc/output-label-attrs.xml 16 Feb 2005 23:00:33 -0000
@@ -35,5 +35,19 @@
             <required>false</required>
         </attribute-extension>
     </attribute>
+ <attribute>
+ <description>
+ Flag indicating that characters that are sensitive
+ in HTML and XML markup must be escaped. This flag
+ is set to "true" by default.
+ </description>
+ <display-name>Escape Characters</display-name>
+ <icon></icon>
+ <attribute-name>escape</attribute-name>
+ <attribute-class>boolean</attribute-class>
+ <attribute-extension>
+ <default-value>true</default-value>
+ </attribute-extension>
+ </attribute>
 </root>
 
Index: jsf-api/doc/output-label-props.xml
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-api/doc/output-label-props.xml,v
retrieving revision 1.5
diff -u -r1.5 output-label-props.xml
--- jsf-api/doc/output-label-props.xml 8 Nov 2004 19:23:00 -0000 1.5
+++ jsf-api/doc/output-label-props.xml 16 Feb 2005 23:00:33 -0000
@@ -35,5 +35,19 @@
             <required>false</required>
         </property-extension>
     </property>
+ <property>
+ <description>
+ Flag indicating that characters that are sensitive
+ in HTML and XML markup must be escaped. If omitted, this
+ flag is assumed to be "false".
+ </description>
+ <display-name>Escape Characters</display-name>
+ <icon></icon>
+ <property-name>escape</property-name>
+ <property-class>boolean</property-class>
+ <property-extension>
+ <default-value>false</default-value>
+ </property-extension>
+ </property>
 </root>
 
Index: jsf-api/doc/standard-html-renderkit.xml
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-api/doc/standard-html-renderkit.xml,v
retrieving revision 1.71
diff -u -r1.71 standard-html-renderkit.xml
--- jsf-api/doc/standard-html-renderkit.xml 12 Jan 2005 23:11:58 -0000 1.71
+++ jsf-api/doc/standard-html-renderkit.xml 16 Feb 2005 23:00:54 -0000
@@ -9715,6 +9715,20 @@
         <required>false</required>
       </property-extension>
     </property>
+ <property>
+ <description>
+ Flag indicating that characters that are sensitive
+ in HTML and XML markup must be escaped. This flag
+ is set to "true" by default.
+ </description>
+ <display-name>Escape Characters</display-name>
+ <icon/>
+ <property-name>escape</property-name>
+ <property-class>boolean</property-class>
+ <property-extension>
+ <default-value>true</default-value>
+ </property-extension>
+ </property>
 
     <component-extension>
       <base-component-type>javax.faces.Output</base-component-type>
@@ -19671,6 +19685,20 @@
         <attribute-class>java.lang.String</attribute-class>
         <attribute-extension>
           <required>false</required>
+ </attribute-extension>
+ </attribute>
+ <attribute>
+ <description>
+ Flag indicating that characters that are sensitive
+ in HTML and XML markup must be escaped. This flag
+ is set to "true" by default.
+ </description>
+ <display-name>Escape Characters</display-name>
+ <icon/>
+ <attribute-name>escape</attribute-name>
+ <attribute-class>boolean</attribute-class>
+ <attribute-extension>
+ <default-value>true</default-value>
         </attribute-extension>
       </attribute>
 
SECTION: RI Diffs

Index: jsf-ri/src/com/sun/faces/renderkit/html_basic/LabelRenderer.java
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/src/com/sun/faces/renderkit/html_basic/LabelRenderer.java,v
retrieving revision 1.33
diff -u -r1.33 LabelRenderer.java
--- jsf-ri/src/com/sun/faces/renderkit/html_basic/LabelRenderer.java 16 Dec 2004 17:56:37 -0000 1.33
+++ jsf-ri/src/com/sun/faces/renderkit/html_basic/LabelRenderer.java 16 Feb 2005 23:00:56 -0000
@@ -130,7 +130,26 @@
             log.trace("Value to be rendered " + value);
         }
         if (value != null && value.length() != 0) {
- writer.write(value);
+ boolean escape = false;
+ Object val = null;
+ if (null != (val = component.getAttributes().get("escape"))) {
+ if (val instanceof Boolean) {
+ escape = ((Boolean) val).booleanValue();
+ } else if (val instanceof String) {
+ try {
+ escape =
+ Boolean.valueOf((String) val).booleanValue();
+ } catch (Throwable e) {
+ }
+ }
+ }
+
+ if (escape) {
+ writer.writeText(value, "value");
+ }
+ else {
+ writer.write(value);
+ }
         }
         writer.flush();
     }
Index: jsf-ri/web/test/RenderResponse_correct
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/web/test/RenderResponse_correct,v
retrieving revision 1.114
diff -u -r1.114 RenderResponse_correct
--- jsf-ri/web/test/RenderResponse_correct 12 Jan 2005 21:37:35 -0000 1.114
+++ jsf-ri/web/test/RenderResponse_correct 16 Feb 2005 23:00:58 -0000
@@ -15,7 +15,7 @@
 
 
   
-<form id="basicForm" method="post" action="/test/faces/TestRenderResponsePhase.jsp;jsessionid=676E0FBF879741B55500B45B856C6622" class="formClass" accept-charset="some-charset" accept="html,wml" enctype="application/x-www-form-urlencoded" target="_self" title="basicForm">
+<form id="basicForm" method="post" action="/test/faces/TestRenderResponsePhase.jsp;jsessionid=A12DCFE1689DC35610E2C994C3D05E2C" class="formClass" accept-charset="some-charset" accept="html,wml" enctype="application/x-www-form-urlencoded" target="_self" title="basicForm">
 
 
   <TABLE BORDER="1">
@@ -130,12 +130,12 @@
 
               
                 
- <a id="basicForm:imageLink" href="#" style="someStyle" onclick="clearFormHiddenParams_basicForm('basicForm');document.forms['basicForm']['basicForm:_idcl'].value='basicForm:imageLink'; document.forms['basicForm'].submit(); return false;"><img src="duke.gif;jsessionid=676E0FBF879741B55500B45B856C6622" /></a>
+ <a id="basicForm:imageLink" href="#" style="someStyle" onclick="clearFormHiddenParams_basicForm('basicForm');document.forms['basicForm']['basicForm:_idcl'].value='basicForm:imageLink'; document.forms['basicForm'].submit(); return false;"><img src="duke.gif;jsessionid=A12DCFE1689DC35610E2C994C3D05E2C" /></a>
 
         </TD>
 
         <TD>
- <img id="basicForm:graphicImage" src="/test/duke.gif;jsessionid=676E0FBF879741B55500B45B856C6622" style="someStyle" usemap="#map1" ismap="ismap" />
+ <img id="basicForm:graphicImage" src="/test/duke.gif;jsessionid=A12DCFE1689DC35610E2C994C3D05E2C" style="someStyle" usemap="#map1" ismap="ismap" />
         </TD>
 
       </TR>
@@ -169,7 +169,7 @@
               
               
               
- <a id="basicForm:hrefParamLink" href="#" onclick="clearFormHiddenParams_basicForm('basicForm');document.forms['basicForm']['basicForm:_idcl'].value='basicForm:hrefParamLink';document.forms['basicForm']['name'].value='horwat';document.forms['basicForm']['value'].value='password'; document.forms['basicForm'].target='_top'; document.forms['basicForm'].submit(); return false;"><img src="duke.gif;jsessionid=676E0FBF879741B55500B45B856C6622" /></a>
+ <a id="basicForm:hrefParamLink" href="#" onclick="clearFormHiddenParams_basicForm('basicForm');document.forms['basicForm']['basicForm:_idcl'].value='basicForm:hrefParamLink';document.forms['basicForm']['name'].value='horwat';document.forms['basicForm']['value'].value='password'; document.forms['basicForm'].target='_top'; document.forms['basicForm'].submit(); return false;"><img src="duke.gif;jsessionid=A12DCFE1689DC35610E2C994C3D05E2C" /></a>
         </TD>
       </TR>
 
@@ -177,7 +177,7 @@
 
         <TD>
 
- <a id="basicForm:outputLink" href="test.html;jsessionid=676E0FBF879741B55500B45B856C6622" class="hyperlinkClass">output link text</a>
+ <a id="basicForm:outputLink" href="test.html;jsessionid=A12DCFE1689DC35610E2C994C3D05E2C" class="hyperlinkClass">output link text</a>
 
         </TD>
 
@@ -189,12 +189,12 @@
 
               
                 
- <a id="basicForm:output_imageLink" href="test.html;jsessionid=676E0FBF879741B55500B45B856C6622" style="position: absolute; left: 96px; top: 168px"><img src="duke.gif;jsessionid=676E0FBF879741B55500B45B856C6622" /></a>
+ <a id="basicForm:output_imageLink" href="test.html;jsessionid=A12DCFE1689DC35610E2C994C3D05E2C" style="position: absolute; left: 96px; top: 168px"><img src="duke.gif;jsessionid=A12DCFE1689DC35610E2C994C3D05E2C" /></a>
 
         </TD>
 
         <TD>
- <img id="basicForm:output_graphicImage" src="/test/duke.gif;jsessionid=676E0FBF879741B55500B45B856C6622" usemap="#map1" ismap="ismap" />
+ <img id="basicForm:output_graphicImage" src="/test/duke.gif;jsessionid=A12DCFE1689DC35610E2C994C3D05E2C" usemap="#map1" ismap="ismap" />
         </TD>
 
       </TR>
@@ -202,7 +202,7 @@
       <TR>
         <TD>
             
- <a id="basicForm:output_commandLink" href="test.html;jsessionid=676E0FBF879741B55500B45B856C6622" style="position: absolute; left: 96px; top: 168px" class="hyperlinkClass">link text</a>
+ <a id="basicForm:output_commandLink" href="test.html;jsessionid=A12DCFE1689DC35610E2C994C3D05E2C" style="position: absolute; left: 96px; top: 168px" class="hyperlinkClass">link text</a>
        </TD>
       </TR>
 
@@ -212,13 +212,13 @@
               
               
               
- <a id="basicForm:output_commandParamLink" href="test.html;jsessionid=676E0FBF879741B55500B45B856C6622?name=horwat&value=password" class="hyperlinkClass">link text</a>
+ <a id="basicForm:output_commandParamLink" href="test.html;jsessionid=A12DCFE1689DC35610E2C994C3D05E2C?name=horwat&value=password" class="hyperlinkClass">link text</a>
         </TD>
       </TR>
 
       <TR>
         <TD>
- <a id="basicForm:output_hrefLink" href="test.html;jsessionid=676E0FBF879741B55500B45B856C6622"><img src="duke.gif"></a>
+ <a id="basicForm:output_hrefLink" href="test.html;jsessionid=A12DCFE1689DC35610E2C994C3D05E2C"><img src="duke.gif"></a>
         </TD>
       </TR>
 
@@ -228,7 +228,7 @@
               
               
               
- <a id="basicForm:output_hrefParamLink" href="test.html;jsessionid=676E0FBF879741B55500B45B856C6622?name=horwat&value=password"><img src="duke.gif;jsessionid=676E0FBF879741B55500B45B856C6622" /></a>
+ <a id="basicForm:output_hrefParamLink" href="test.html;jsessionid=A12DCFE1689DC35610E2C994C3D05E2C?name=horwat&value=password"><img src="duke.gif;jsessionid=A12DCFE1689DC35610E2C994C3D05E2C" /></a>
         </TD>
       </TR>
 
@@ -311,6 +311,19 @@
         </TD>
 
       </TR>
+
+ <TR>
+ <TD>
+ <label id="basicForm:labe18" for="basicForm:checkbox8">
+escape&lt;p&gt;this markup&lt;/p&gt;
+ <span id="basicForm:outputlabel8">andsometext</span>
+ </label>
+
+ <input id="basicForm:checkbox8" type="checkbox" name="basicForm:checkbox8" class="selectbooleanClass" />
+ </TD>
+
+ </TR>
+
       <TR>
 
         <TD>
Index: jsf-ri/web/test/TestRenderResponsePhase.jsp
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/web/test/TestRenderResponsePhase.jsp,v
retrieving revision 1.85
diff -u -r1.85 TestRenderResponsePhase.jsp
--- jsf-ri/web/test/TestRenderResponsePhase.jsp 12 Jan 2005 21:37:35 -0000 1.85
+++ jsf-ri/web/test/TestRenderResponsePhase.jsp 16 Feb 2005 23:00:59 -0000
@@ -303,6 +303,19 @@
         </TD>
 
       </TR>
+
+ <TR>
+ <TD>
+ <h:outputLabel id="labe18" for="checkbox8" escape="true" value="escape<p>this markup</p>">
+ <h:outputText id="outputlabel8" value="andsometext"/>
+ </h:outputLabel>
+
+ <h:selectBooleanCheckbox id="checkbox8" rendered="true"
+ styleClass="selectbooleanClass" />
+ </TD>
+
+ </TR>
+
       <TR>
 
         <TD>

SECTION: Files changed

M jsf-api/doc/output-label-attrs.xml
M jsf-api/doc/output-label-props.xml
M jsf-ri/src/com/sun/faces/renderkit/html_basic/LabelRenderer.java
M jsf-ri/web/test/RenderResponse_correct
M jsf-ri/web/test/TestRenderResponsePhase.jsp

-- 
| 27 Business days to PR Spec Freeze
| ed.burns_at_sun.com  | {home: 407 294 2468, office: 408 884 9519 OR x31640}
| homepage:         | http://javaweb.sfbay.sun.com/~edburns/
| aim: edburns0sunw | iim: ed.burns_at_sun.com