This is an automated email from the ASF dual-hosted git repository. lukaszlenart pushed a commit to branch WW-5240-doubleselect in repository https://gitbox.apache.org/repos/asf/struts.git
commit ac168968a02d043ac6c36b7966ac501b0a04b1a8 Author: Lukasz Lenart <lukaszlen...@apache.org> AuthorDate: Sat Nov 5 08:31:46 2022 +0100 WW-5240 Uses doubleOn* attributes in the template This allows assign custom JS event handlers to the second select box --- .../resources/template/simple/doubleselect.ftl | 85 ++++++-- core/src/main/resources/template/simple/select.ftl | 6 +- .../struts2/views/jsp/ui/DoubleSelectTest.java | 233 +++++++++++++++++---- .../apache/struts2/views/jsp/ui/DoubleSelect-6.txt | 42 ++++ 4 files changed, 299 insertions(+), 67 deletions(-) diff --git a/core/src/main/resources/template/simple/doubleselect.ftl b/core/src/main/resources/template/simple/doubleselect.ftl index 674680ef1..2a87e30f5 100644 --- a/core/src/main/resources/template/simple/doubleselect.ftl +++ b/core/src/main/resources/template/simple/doubleselect.ftl @@ -20,58 +20,99 @@ --> <#global dynamic_attributes_ignore = "second-"/> <#include "/${parameters.templateDir}/simple/select.ftl" /> -<#assign startCount = 0/> +<#assign startCount = 0/><#rt/> <#if parameters.headerKey?? && parameters.headerValue??> - <#assign startCount = startCount + 1/> + <#assign startCount = startCount + 1/><#rt/> </#if> <#if parameters.emptyOption??> - <#assign startCount = startCount + 1/> + <#assign startCount = startCount + 1/><#rt/> </#if> - <br/> <select<#rt/> - name="${(parameters.doubleName!"")}"<#rt/> + name="${(parameters.doubleName!"")}"<#rt/> <#if parameters.disabled!false> - disabled="disabled"<#rt/> + disabled="disabled"<#rt/> </#if> <#if parameters.doubleTabindex?has_content> - tabindex="${parameters.doubleTabindex}"<#rt/> + tabindex="${parameters.doubleTabindex}"<#rt/> </#if> <#if parameters.doubleId?has_content> - id="${parameters.doubleId}"<#rt/> + id="${parameters.doubleId}"<#rt/> </#if> <#if parameters.doubleCss?has_content> - class="${parameters.doubleCss}"<#rt/> + class="${parameters.doubleCss}"<#rt/> </#if> <#if parameters.doubleStyle?has_content> - style="${parameters.doubleStyle}"<#rt/> + style="${parameters.doubleStyle}"<#rt/> </#if> <#if parameters.title?has_content> - title="${parameters.title}"<#rt/> + title="${parameters.title}"<#rt/> </#if> <#if parameters.multiple!false> - multiple="multiple"<#rt/> + multiple="multiple"<#rt/> </#if> <#if parameters.get("doubleSize")?has_content> - size="${parameters.get("doubleSize")}"<#rt/> + size="${parameters.get("doubleSize")}"<#rt/> </#if> <#if parameters.doubleMultiple!false> - multiple="multiple"<#rt/> + multiple="multiple"<#rt/> </#if> <#if parameters.doubleDisabled!false> - disabled="disabled"<#rt/> + disabled="disabled"<#rt/> +</#if> +<#if parameters.doubleOnclick??> + onclick="<#outputformat 'JavaScript'>${parameters.doubleOnclick}</#outputformat>"<#rt/> +</#if> +<#if parameters.doubleOndblclick??> + ondblclick="<#outputformat 'JavaScript'>${parameters.doubleOndblclick}</#outputformat>"<#rt/> +</#if> +<#if parameters.doubleOnmousedown??> + onmousedown="<#outputformat 'JavaScript'>${parameters.doubleOnmousedown}</#outputformat>"<#rt/> +</#if> +<#if parameters.doubleOnmouseup??> + onmouseup="<#outputformat 'JavaScript'>${parameters.doubleOnmouseup}</#outputformat>"<#rt/> +</#if> +<#if parameters.doubleOnmouseover??> + onmouseover="<#outputformat 'JavaScript'>${parameters.doubleOnmouseover}</#outputformat>"<#rt/> +</#if> +<#if parameters.doubleOnmousemove??> + onmousemove="<#outputformat 'JavaScript'>${parameters.doubleOnmousemove}</#outputformat>"<#rt/> +</#if> +<#if parameters.doubleOnmouseout??> + onmouseout="<#outputformat 'JavaScript'>${parameters.doubleOnmouseout}</#outputformat>"<#rt/> +</#if> +<#if parameters.doubleOnfocus??> + onfocus="<#outputformat 'JavaScript'>${parameters.doubleOnfocus}</#outputformat>"<#rt/> +</#if> +<#if parameters.doubleOnblur??> + onblur="<#outputformat 'JavaScript'>${parameters.doubleOnblur}</#outputformat>"<#rt/> +</#if> +<#if parameters.doubleOnkeypress??> + onkeypress="<#outputformat 'JavaScript'>${parameters.doubleOnkeypress}</#outputformat>"<#rt/> +</#if> +<#if parameters.doubleOnkeydown??> + onkeydown="<#outputformat 'JavaScript'>${parameters.doubleOnkeydown}</#outputformat>"<#rt/> +</#if> +<#if parameters.doubleOnkeyup??> + onkeyup="<#outputformat 'JavaScript'>${parameters.doubleOnkeyup}</#outputformat>"<#rt/> +</#if> +<#if parameters.doubleOnselect??> + onselect="<#outputformat 'JavaScript'>${parameters.doubleOnselect}</#outputformat>"<#rt/> +</#if> +<#if parameters.doubleOnchange??> + onchange="<#outputformat 'JavaScript'>${parameters.doubleOnchange}</#outputformat>"<#rt/> </#if> <#include "/${parameters.templateDir}/${parameters.expandTheme}/prefixed-dynamic-attributes.ftl" /> <@prefixedDynamicAttributes prefix="second-"/> - > +> </select> <#if parameters.doubleMultiple!false> -<input type="hidden" id="__multiselect_${parameters.doubleId}" - name="__multiselect_${(parameters.doubleName!"")}" value=""<#rt/> - <#if parameters.doubleDisabled!false> - disabled="disabled"<#rt/> - </#if> - /> +<input type="hidden" id="__multiselect_${parameters.doubleId}"<#rt/> + name="__multiselect_${(parameters.doubleName!"")}" value=""<#rt/> +<#if parameters.doubleDisabled!false> + disabled="disabled"<#rt/> +</#if> +/><#rt/> </#if> <@s.script type="text/javascript"> <#assign itemCount = startCount/> diff --git a/core/src/main/resources/template/simple/select.ftl b/core/src/main/resources/template/simple/select.ftl index 7e90c8045..c10633e5e 100644 --- a/core/src/main/resources/template/simple/select.ftl +++ b/core/src/main/resources/template/simple/select.ftl @@ -45,9 +45,9 @@ <#include "/${parameters.templateDir}/${parameters.expandTheme}/dynamic-attributes.ftl" /> > <#if parameters.headerKey?? && parameters.headerValue??> - <option value="${parameters.headerKey}" + <option value="${parameters.headerKey}"<#rt/> <#if tag.contains(parameters.nameValue, parameters.headerKey) == true> - selected="selected" + selected="selected"<#rt/> </#if> >${parameters.headerValue}</option> </#if> @@ -121,9 +121,7 @@ </#if> >${itemValue}</option><#lt/> </@s.iterator> - <#include "/${parameters.templateDir}/${parameters.expandTheme}/optgroup.ftl" /> - </select> <#if parameters.multiple!false> diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleSelectTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleSelectTest.java index ce40fa5ca..d073811a4 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleSelectTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleSelectTest.java @@ -37,7 +37,7 @@ public class DoubleSelectTest extends AbstractUITagTest { Region antwerp = new Region("Antwerp", "AN"); Region gent = new Region("Gent", "GN"); Region brugge = new Region("Brugge", "BRG"); - ArrayList belgiumRegions = new ArrayList(); + List<Region> belgiumRegions = new ArrayList<>(); belgiumRegions.add(antwerp); belgiumRegions.add(gent); belgiumRegions.add(brugge); @@ -45,16 +45,16 @@ public class DoubleSelectTest extends AbstractUITagTest { Region paris = new Region("Paris", "PA"); Region bordeaux = new Region("Bordeaux", "BOR"); - ArrayList franceRegions = new ArrayList(); + List<Region> franceRegions = new ArrayList<>(); franceRegions.add(paris); franceRegions.add(bordeaux); Country france = new Country("France", "FR", franceRegions); - Collection collection = new ArrayList(2); + Collection<String> collection = new ArrayList<>(2); collection.add("AN"); testAction.setCollection(collection); - List countries = new ArrayList(); + List<Country> countries = new ArrayList<>(); countries.add(belgium); countries.add(france); @@ -103,13 +103,87 @@ public class DoubleSelectTest extends AbstractUITagTest { strutsBodyTagsAreReflectionEqual(tag, freshTag)); } + public void testDoubleJavaScriptEvents() throws Exception { + TestAction testAction = (TestAction) action; + + Region antwerp = new Region("Antwerp", "AN"); + Region gent = new Region("Gent", "GN"); + Region brugge = new Region("Brugge", "BRG"); + List<Region> belgiumRegions = new ArrayList<>(); + belgiumRegions.add(antwerp); + belgiumRegions.add(gent); + belgiumRegions.add(brugge); + Country belgium = new Country("Belgium", "BE", belgiumRegions); + + Region paris = new Region("Paris", "PA"); + Region bordeaux = new Region("Bordeaux", "BOR"); + List<Region> franceRegions = new ArrayList<>(); + franceRegions.add(paris); + franceRegions.add(bordeaux); + Country france = new Country("France", "FR", franceRegions); + + Collection<String> collection = new ArrayList<>(2); + collection.add("AN"); + testAction.setCollection(collection); + + List<Country> countries = new ArrayList<>(); + countries.add(belgium); + countries.add(france); + + testAction.setList2(countries); + + DoubleSelectTag tag = new DoubleSelectTag(); + tag.setPageContext(pageContext); + tag.setTheme("simple"); + tag.setLabel("mylabel"); + tag.setName("foo"); + tag.setDoubleName("region"); + + tag.setList("list2"); + tag.setDoubleList("regions"); + + tag.setListKey("iso"); + tag.setDoubleListKey("key"); + tag.setListValue("name"); + tag.setDoubleListValue("name"); + + tag.setFormName("inputForm"); + + tag.setDoubleOnclick("testMe()"); + tag.setDoubleOndblclick("testMe()"); + tag.setDoubleOnmousedown("testMe()"); + tag.setDoubleOnmouseup("testMe()"); + tag.setDoubleOnmouseover("testMe()"); + tag.setDoubleOnmousemove("testMe()"); + tag.setDoubleOnmouseout("testMe()"); + tag.setDoubleOnfocus("testMe()"); + tag.setDoubleOnblur("testMe()"); + tag.setDoubleOnkeypress("testMe()"); + tag.setDoubleOnkeydown("testMe()"); + tag.setDoubleOnkeyup("testMe()"); + tag.setDoubleOnselect("testMe()"); + tag.setDoubleOnchange("testMe()"); + + tag.doStartTag(); + tag.doEndTag(); + + verify(SelectTag.class.getResource("DoubleSelect-6.txt")); + + // Basic sanity check of clearTagStateForTagPoolingServers() behaviour for Struts Tags after doEndTag(). + DoubleSelectTag freshTag = new DoubleSelectTag(); + freshTag.setPageContext(pageContext); + assertFalse("Tag state after doEndTag() under default tag clear state is equal to new Tag with pageContext/parent set. " + + "May indicate that clearTagStateForTagPoolingServers() calls are not working properly.", + strutsBodyTagsAreReflectionEqual(tag, freshTag)); + } + public void testDouble_clearTagStateSet() throws Exception { TestAction testAction = (TestAction) action; Region antwerp = new Region("Antwerp", "AN"); Region gent = new Region("Gent", "GN"); Region brugge = new Region("Brugge", "BRG"); - ArrayList belgiumRegions = new ArrayList(); + List<Region> belgiumRegions = new ArrayList<>(); belgiumRegions.add(antwerp); belgiumRegions.add(gent); belgiumRegions.add(brugge); @@ -117,16 +191,16 @@ public class DoubleSelectTest extends AbstractUITagTest { Region paris = new Region("Paris", "PA"); Region bordeaux = new Region("Bordeaux", "BOR"); - ArrayList franceRegions = new ArrayList(); + ArrayList<Region> franceRegions = new ArrayList<>(); franceRegions.add(paris); franceRegions.add(bordeaux); Country france = new Country("France", "FR", franceRegions); - Collection collection = new ArrayList(2); + Collection<String> collection = new ArrayList<>(2); collection.add("AN"); testAction.setCollection(collection); - List countries = new ArrayList(); + List<Country> countries = new ArrayList<>(); countries.add(belgium); countries.add(france); @@ -178,13 +252,90 @@ public class DoubleSelectTest extends AbstractUITagTest { strutsBodyTagsAreReflectionEqual(tag, freshTag)); } + public void testDoubleJavaScriptEvents_clearTagStateSet() throws Exception { + TestAction testAction = (TestAction) action; + + Region antwerp = new Region("Antwerp", "AN"); + Region gent = new Region("Gent", "GN"); + Region brugge = new Region("Brugge", "BRG"); + List<Region> belgiumRegions = new ArrayList<>(); + belgiumRegions.add(antwerp); + belgiumRegions.add(gent); + belgiumRegions.add(brugge); + Country belgium = new Country("Belgium", "BE", belgiumRegions); + + Region paris = new Region("Paris", "PA"); + Region bordeaux = new Region("Bordeaux", "BOR"); + ArrayList<Region> franceRegions = new ArrayList<>(); + franceRegions.add(paris); + franceRegions.add(bordeaux); + Country france = new Country("France", "FR", franceRegions); + + Collection<String> collection = new ArrayList<>(2); + collection.add("AN"); + testAction.setCollection(collection); + + List<Country> countries = new ArrayList<>(); + countries.add(belgium); + countries.add(france); + + testAction.setList2(countries); + + DoubleSelectTag tag = new DoubleSelectTag(); + tag.setPerformClearTagStateForTagPoolingServers(true); // Explicitly request tag state clearing. + tag.setPageContext(pageContext); + tag.setTheme("simple"); + tag.setLabel("mylabel"); + tag.setName("foo"); + tag.setDoubleName("region"); + + tag.setList("list2"); + tag.setDoubleList("regions"); + + tag.setListKey("iso"); + tag.setDoubleListKey("key"); + tag.setListValue("name"); + tag.setDoubleListValue("name"); + + tag.setFormName("inputForm"); + + tag.setDoubleOnclick("testMe()"); + tag.setDoubleOndblclick("testMe()"); + tag.setDoubleOnmousedown("testMe()"); + tag.setDoubleOnmouseup("testMe()"); + tag.setDoubleOnmouseover("testMe()"); + tag.setDoubleOnmousemove("testMe()"); + tag.setDoubleOnmouseout("testMe()"); + tag.setDoubleOnfocus("testMe()"); + tag.setDoubleOnblur("testMe()"); + tag.setDoubleOnkeypress("testMe()"); + tag.setDoubleOnkeydown("testMe()"); + tag.setDoubleOnkeyup("testMe()"); + tag.setDoubleOnselect("testMe()"); + tag.setDoubleOnchange("testMe()"); + + tag.doStartTag(); + setComponentTagClearTagState(tag, true); // Ensure component tag state clearing is set true (to match tag). + tag.doEndTag(); + + verify(SelectTag.class.getResource("DoubleSelect-6.txt")); + + // Basic sanity check of clearTagStateForTagPoolingServers() behaviour for Struts Tags after doEndTag(). + DoubleSelectTag freshTag = new DoubleSelectTag(); + freshTag.setPerformClearTagStateForTagPoolingServers(true); + freshTag.setPageContext(pageContext); + assertTrue("Tag state after doEndTag() and explicit tag state clearing is inequal to new Tag with pageContext/parent set. " + + "May indicate that clearTagStateForTagPoolingServers() calls are not working properly.", + strutsBodyTagsAreReflectionEqual(tag, freshTag)); + } + public void testOnchange() throws Exception { TestAction testAction = (TestAction) action; Region antwerp = new Region("Antwerp", "AN"); Region gent = new Region("Gent", "GN"); Region brugge = new Region("Brugge", "BRG"); - ArrayList belgiumRegions = new ArrayList(); + List<Region> belgiumRegions = new ArrayList<>(); belgiumRegions.add(antwerp); belgiumRegions.add(gent); belgiumRegions.add(brugge); @@ -192,16 +343,16 @@ public class DoubleSelectTest extends AbstractUITagTest { Region paris = new Region("Paris", "PA"); Region bordeaux = new Region("Bordeaux", "BOR"); - ArrayList franceRegions = new ArrayList(); + List<Region> franceRegions = new ArrayList<>(); franceRegions.add(paris); franceRegions.add(bordeaux); Country france = new Country("France", "FR", franceRegions); - Collection collection = new ArrayList(2); + Collection<String> collection = new ArrayList<>(2); collection.add("AN"); testAction.setCollection(collection); - List countries = new ArrayList(); + List<Country> countries = new ArrayList<>(); countries.add(belgium); countries.add(france); @@ -255,7 +406,7 @@ public class DoubleSelectTest extends AbstractUITagTest { Region antwerp = new Region("Antwerp", "AN"); Region gent = new Region("Gent", "GN"); Region brugge = new Region("Brugge", "BRG"); - ArrayList belgiumRegions = new ArrayList(); + List<Region> belgiumRegions = new ArrayList<>(); belgiumRegions.add(antwerp); belgiumRegions.add(gent); belgiumRegions.add(brugge); @@ -263,16 +414,16 @@ public class DoubleSelectTest extends AbstractUITagTest { Region paris = new Region("Paris", "PA"); Region bordeaux = new Region("Bordeaux", "BOR"); - ArrayList franceRegions = new ArrayList(); + List<Region> franceRegions = new ArrayList<>(); franceRegions.add(paris); franceRegions.add(bordeaux); Country france = new Country("France", "FR", franceRegions); - Collection collection = new ArrayList(2); + Collection<String> collection = new ArrayList<>(2); collection.add("AN"); testAction.setCollection(collection); - List countries = new ArrayList(); + List<Country> countries = new ArrayList<>(); countries.add(belgium); countries.add(france); @@ -330,7 +481,7 @@ public class DoubleSelectTest extends AbstractUITagTest { Region antwerp = new Region("Antwerp", "AN"); Region gent = new Region("Gent", "GN"); Region brugge = new Region("Brugge", "BRG"); - ArrayList belgiumRegions = new ArrayList(); + List<Region> belgiumRegions = new ArrayList<>(); belgiumRegions.add(antwerp); belgiumRegions.add(gent); belgiumRegions.add(brugge); @@ -338,16 +489,16 @@ public class DoubleSelectTest extends AbstractUITagTest { Region paris = new Region("Paris", "PA"); Region bordeaux = new Region("Bordeaux", "BOR"); - ArrayList franceRegions = new ArrayList(); + List<Region> franceRegions = new ArrayList<>(); franceRegions.add(paris); franceRegions.add(bordeaux); Country france = new Country("France", "FR", franceRegions); - Collection collection = new ArrayList(2); + Collection<String> collection = new ArrayList<>(2); collection.add("AN"); testAction.setCollection(collection); - List countries = new ArrayList(); + List<Country> countries = new ArrayList<>(); countries.add(belgium); countries.add(france); @@ -398,7 +549,7 @@ public class DoubleSelectTest extends AbstractUITagTest { Region antwerp = new Region("Antwerp", "AN"); Region gent = new Region("Gent", "GN"); Region brugge = new Region("Brugge", "BRG"); - ArrayList belgiumRegions = new ArrayList(); + List<Region> belgiumRegions = new ArrayList<>(); belgiumRegions.add(antwerp); belgiumRegions.add(gent); belgiumRegions.add(brugge); @@ -406,16 +557,16 @@ public class DoubleSelectTest extends AbstractUITagTest { Region paris = new Region("Paris", "PA"); Region bordeaux = new Region("Bordeaux", "BOR"); - ArrayList franceRegions = new ArrayList(); + List<Region> franceRegions = new ArrayList<>(); franceRegions.add(paris); franceRegions.add(bordeaux); Country france = new Country("France", "FR", franceRegions); - Collection collection = new ArrayList(2); + Collection<String> collection = new ArrayList<>(2); collection.add("AN"); testAction.setCollection(collection); - List countries = new ArrayList(); + List<Country> countries = new ArrayList<>(); countries.add(belgium); countries.add(france); @@ -468,7 +619,7 @@ public class DoubleSelectTest extends AbstractUITagTest { Region antwerp = new Region("Antwerp", "AN"); Region gent = new Region("Gent", "GN"); Region brugge = new Region("Brugge", "BRG"); - ArrayList belgiumRegions = new ArrayList(); + List<Region> belgiumRegions = new ArrayList<>(); belgiumRegions.add(antwerp); belgiumRegions.add(gent); belgiumRegions.add(brugge); @@ -476,16 +627,16 @@ public class DoubleSelectTest extends AbstractUITagTest { Region paris = new Region("Paris", "PA"); Region bordeaux = new Region("Bordeaux", "BOR"); - ArrayList franceRegions = new ArrayList(); + List<Region> franceRegions = new ArrayList<>(); franceRegions.add(paris); franceRegions.add(bordeaux); Country france = new Country("France", "FR", franceRegions); - Collection collection = new ArrayList(2); + Collection<String> collection = new ArrayList<>(2); collection.add("AN"); testAction.setCollection(collection); - List countries = new ArrayList(); + List<Country> countries = new ArrayList<>(); countries.add(belgium); countries.add(france); @@ -532,7 +683,7 @@ public class DoubleSelectTest extends AbstractUITagTest { Region antwerp = new Region("Antwerp", "AN"); Region gent = new Region("Gent", "GN"); Region brugge = new Region("Brugge", "BRG"); - ArrayList belgiumRegions = new ArrayList(); + List<Region> belgiumRegions = new ArrayList<>(); belgiumRegions.add(antwerp); belgiumRegions.add(gent); belgiumRegions.add(brugge); @@ -540,16 +691,16 @@ public class DoubleSelectTest extends AbstractUITagTest { Region paris = new Region("Paris", "PA"); Region bordeaux = new Region("Bordeaux", "BOR"); - ArrayList franceRegions = new ArrayList(); + List<Region> franceRegions = new ArrayList<>(); franceRegions.add(paris); franceRegions.add(bordeaux); Country france = new Country("France", "FR", franceRegions); - Collection collection = new ArrayList(2); + Collection<String> collection = new ArrayList<>(2); collection.add("AN"); testAction.setCollection(collection); - List countries = new ArrayList(); + List<Country> countries = new ArrayList<>(); countries.add(belgium); countries.add(france); @@ -619,7 +770,7 @@ public class DoubleSelectTest extends AbstractUITagTest { Region antwerp = new Region("Antwerp", "AN"); Region gent = new Region("Gent", "GN"); Region brugge = new Region("Brugge", "BRG"); - ArrayList belgiumRegions = new ArrayList(); + List<Region> belgiumRegions = new ArrayList<>(); belgiumRegions.add(antwerp); belgiumRegions.add(gent); belgiumRegions.add(brugge); @@ -627,18 +778,18 @@ public class DoubleSelectTest extends AbstractUITagTest { Region paris = new Region("Paris", "PA"); Region bordeaux = new Region("Bordeaux", "BOR"); - ArrayList franceRegions = new ArrayList(); + List<Region> franceRegions = new ArrayList<>(); franceRegions.add(paris); franceRegions.add(bordeaux); Country france = new Country("France", "FR", franceRegions); - Collection collection = new ArrayList(2); + Collection<String> collection = new ArrayList<>(2); collection.add("AN"); testAction.setCollection(collection); tag.setList("collection"); - List countries = new ArrayList(); + List<Country> countries = new ArrayList<>(); countries.add(belgium); countries.add(france); @@ -659,12 +810,12 @@ public class DoubleSelectTest extends AbstractUITagTest { tag.setFormName("inputForm"); } - public class Country { + public static class Country { String name; String iso; - Collection regions; + Collection<Region> regions; - public Country(String name, String iso, Collection regions) { + public Country(String name, String iso, Collection<Region> regions) { this.name = name; this.iso = iso; this.regions = regions; @@ -678,12 +829,12 @@ public class DoubleSelectTest extends AbstractUITagTest { return iso; } - public Collection getRegions() { + public Collection<Region> getRegions() { return regions; } } - public class Region { + public static class Region { String name; String key; diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleSelect-6.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleSelect-6.txt new file mode 100644 index 000000000..a0a51aa49 --- /dev/null +++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleSelect-6.txt @@ -0,0 +1,42 @@ +<select name="foo" id="foo" onchange="fooRedirect(this.selectedIndex)"> + <option value="BE">Belgium</option> + <option value="FR">France</option> +</select> + +<br/> +<select name="region" id="region" onclick="testMe()" ondblclick="testMe()" onmousedown="testMe()" onmouseup="testMe()" onmouseover="testMe()" onmousemove="testMe()" onmouseout="testMe()" onfocus="testMe()" onblur="testMe()" onkeypress="testMe()" onkeydown="testMe()" onselect="testMe()" onchange="testMe()"> +</select> +<script type="text/javascript" > + var fooGroup = new Array(2 + 0); + for (var i = 0; i < (2 + 0); i++) { + fooGroup[i] = []; + } + + fooGroup[0][0] = new Option("Antwerp", "AN"); + + fooGroup[0][1] = new Option("Gent", "GN"); + + fooGroup[0][2] = new Option("Brugge", "BRG"); + + fooGroup[1][0] = new Option("Paris", "PA"); + + fooGroup[1][1] = new Option("Bordeaux", "BOR"); + + + var fooTemp = document.inputForm.region; + fooRedirect(0); + function fooRedirect(x) { + var selected = false; + for (var m = fooTemp.options.length - 1; m >= 0; m--) { + fooTemp.remove(m); + } + + for (var i = 0; i < fooGroup[x].length; i++) { + fooTemp.options[i] = new Option(fooGroup[x][i].text, fooGroup[x][i].value); + } + + if ((fooTemp.options.length > 0) && (! selected)) { + fooTemp.options[0].selected = true; + } + } +</script>