Author: rgielen Date: Fri Jul 27 07:57:26 2007 New Revision: 560260 URL: http://svn.apache.org/viewvc?view=rev&rev=560260 Log: WW-2007: Fixing problems with generated javascript idetitifiers containing unescaped id parameter value
Added: struts/struts2/branches/STRUTS_2_0_X/core/src/test/resources/org/apache/struts2/views/jsp/ui/ComboBox-4.txt Modified: struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/UIBean.java struts/struts2/branches/STRUTS_2_0_X/core/src/main/resources/template/simple/combobox.ftl struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/views/jsp/ui/ComboBoxTest.java Modified: struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/UIBean.java URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/UIBean.java?view=diff&rev=560260&r1=560259&r2=560260 ============================================================================== --- struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/UIBean.java (original) +++ struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/UIBean.java Fri Jul 27 07:57:26 2007 @@ -852,7 +852,8 @@ /** * Create HTML id element for the component and populate this component parmaeter - * map. + * map. Additionally, a parameter named escapedId is populated which contains the found id value filtered by + * [EMAIL PROTECTED] #escape(String)}, needed eg. for naming Javascript identifiers based on the id value. * * The order is as follows :- * <ol> @@ -864,19 +865,22 @@ * @param form */ protected void populateComponentHtmlId(Form form) { + String tryId; if (id != null) { // this check is needed for backwards compatibility with 2.1.x if (altSyntax()) { - addParameter("id", findString(id)); + tryId = findString(id); } else { - addParameter("id", id); + tryId = id; } } else if (form != null) { - addParameter("id", form.getParameters().get("id") + "_" - + escape(name != null ? findString(name) : null)); + tryId = form.getParameters().get("id") + "_" + + escape(name != null ? findString(name) : null); } else { - addParameter("id", escape(name != null ? findString(name) : null)); + tryId = escape(name != null ? findString(name) : null); } + addParameter("id", tryId); + addParameter("escapedId", escape(tryId)); } @StrutsTagAttribute(description="The template directory.") Modified: struts/struts2/branches/STRUTS_2_0_X/core/src/main/resources/template/simple/combobox.ftl URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_0_X/core/src/main/resources/template/simple/combobox.ftl?view=diff&rev=560260&r1=560259&r2=560260 ============================================================================== --- struts/struts2/branches/STRUTS_2_0_X/core/src/main/resources/template/simple/combobox.ftl (original) +++ struts/struts2/branches/STRUTS_2_0_X/core/src/main/resources/template/simple/combobox.ftl Fri Jul 27 07:57:26 2007 @@ -21,7 +21,7 @@ */ --> <script type="text/javascript"> - function autoPopulate_${parameters.id?html}(targetElement) { + function autoPopulate_${parameters.escapedId?html}(targetElement) { <#if parameters.headerKey?exists && parameters.headerValue?exists> if (targetElement.options[targetElement.selectedIndex].value == '${parameters.headerKey?html}') { return; @@ -38,7 +38,7 @@ <#include "/${parameters.templateDir}/simple/text.ftl" /> <br /> <#if parameters.list?exists> -<select onChange="autoPopulate_${parameters.id?html}(this);"<#rt/> +<select onChange="autoPopulate_${parameters.escapedId?html}(this);"<#rt/> <#if parameters.disabled?default(false)> disabled="disabled"<#rt/> </#if> Modified: struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/views/jsp/ui/ComboBoxTest.java URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/views/jsp/ui/ComboBoxTest.java?view=diff&rev=560260&r1=560259&r2=560260 ============================================================================== --- struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/views/jsp/ui/ComboBoxTest.java (original) +++ struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/views/jsp/ui/ComboBoxTest.java Fri Jul 27 07:57:26 2007 @@ -140,4 +140,26 @@ verify(ComboBoxTag.class.getResource("ComboBox-3.txt")); } + + public void testJsCallNamingUsesEscapedId() throws Exception { + TestAction testAction = (TestAction) action; + testAction.setFoo("hello"); + + ArrayList collection = new ArrayList(); + collection.add("foo"); + testAction.setCollection(collection); + + ComboBoxTag tag = new ComboBoxTag(); + tag.setPageContext(pageContext); + tag.setLabel("mylabel"); + tag.setName("foo"); + tag.setId("cb.bc"); + tag.setList("collection"); + + tag.doStartTag(); + tag.doEndTag(); + + verify(ComboBoxTag.class.getResource("ComboBox-4.txt")); + } + } Added: struts/struts2/branches/STRUTS_2_0_X/core/src/test/resources/org/apache/struts2/views/jsp/ui/ComboBox-4.txt URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_0_X/core/src/test/resources/org/apache/struts2/views/jsp/ui/ComboBox-4.txt?view=auto&rev=560260 ============================================================================== --- struts/struts2/branches/STRUTS_2_0_X/core/src/test/resources/org/apache/struts2/views/jsp/ui/ComboBox-4.txt (added) +++ struts/struts2/branches/STRUTS_2_0_X/core/src/test/resources/org/apache/struts2/views/jsp/ui/ComboBox-4.txt Fri Jul 27 07:57:26 2007 @@ -0,0 +1,14 @@ +<tr> + <td class="tdLabel"><label for="cb.bc" class="label">mylabel:</label></td> + <td> +<script type="text/javascript"> + function autoPopulate_cb_bc(targetElement) { + targetElement.form.elements['foo'].value=targetElement.options[targetElement.selectedIndex].value; + } +</script> +<input type="text" name="foo" value="hello" id="cb.bc"/><br/> +<select onChange="autoPopulate_cb_bc(this);"> + <option value="foo">foo</option> +</select> + </td> +</tr>