dev@javaserverfaces.java.net

Re: Seeking Review [NEW] add escape attribute to Label renderer

From: Craig R. McClanahan <Craig.McClanahan_at_Sun.COM>
Date: Wed, 16 Feb 2005 15:18:05 -0800

Ed Burns wrote:

>[NEW] add escape attribute to Label renderer.
>
>CRAIG: ok with this resolution?
>
>
>
I'm fine except for a nitpick and a documentation issue.

* Nitpick -- you shouldn't be editing (or checking in) xxx-attrs.xml
files ...
  they get generated from the corresponding xxx-props.xml files (or at
  least they used to).

* Documentation issue -- there are discrepancies in the various places
  you describe the default value for this attribute. I agree that the
default
  should be false, but in some places you've got it described as true.

Craig

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