Author: nilsga Date: Sat Apr 25 06:07:58 2009 New Revision: 768476 URL: http://svn.apache.org/viewvc?rev=768476&view=rev Log: WW-2863 Appending the user's 'onchange' to the default.
Added: struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleSelect-4.txt Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/DoubleSelect.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleSelectTest.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/DoubleSelect.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/DoubleSelect.java?rev=768476&r1=768475&r2=768476&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/DoubleSelect.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/DoubleSelect.java Sat Apr 25 06:07:58 2009 @@ -24,6 +24,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.commons.lang.xwork.StringUtils; import org.apache.struts2.views.annotations.StrutsTag; import com.opensymphony.xwork2.util.ValueStack; @@ -59,8 +60,12 @@ public void evaluateExtraParams() { super.evaluateExtraParams(); - + StringBuilder onchangeParam = new StringBuilder(); + onchangeParam.append(getParameters().get("id")).append("Redirect(this.options.selectedIndex)"); + if(StringUtils.isNotEmpty(this.onchange)) { + onchangeParam.append(";").append(this.onchange); + } // force the onchange parameter - addParameter("onchange", getParameters().get("id") + "Redirect(this.options.selectedIndex)"); + addParameter("onchange", onchangeParam.toString()); } } Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleSelectTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleSelectTest.java?rev=768476&r1=768475&r2=768476&view=diff ============================================================================== --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleSelectTest.java (original) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleSelectTest.java Sat Apr 25 06:07:58 2009 @@ -96,6 +96,70 @@ verify(SelectTag.class.getResource("DoubleSelect-1.txt")); } + + 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(); + 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 franceRegions = new ArrayList(); + franceRegions.add(paris); + franceRegions.add(bordeaux); + Country france = new Country("France", "FR", franceRegions); + + Collection collection = new ArrayList(2); + collection.add("AN"); + testAction.setCollection(collection); + + List countries = new ArrayList(); + countries.add(belgium); + countries.add(france); + + testAction.setList2(countries); + + DoubleSelectTag tag = new DoubleSelectTag(); + tag.setPageContext(pageContext); + 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.setOnmousedown("window.status='onmousedown';"); + tag.setOnmousemove("window.status='onmousemove';"); + tag.setOnmouseout("window.status='onmouseout';"); + tag.setOnmouseover("window.status='onmouseover';"); + tag.setOnmouseup("window.status='onmouseup';"); + tag.setOnchange("window.status='onchange';"); + + //css style and class + tag.setCssClass("c1"); + tag.setCssStyle("s1"); + tag.setDoubleCssClass("c2"); + tag.setDoubleCssStyle("s2"); + + tag.doStartTag(); + tag.doEndTag(); + + verify(SelectTag.class.getResource("DoubleSelect-4.txt")); + } public void testDoubleWithDefaultSelectedValues() throws Exception { Added: struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleSelect-4.txt URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleSelect-4.txt?rev=768476&view=auto ============================================================================== --- struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleSelect-4.txt (added) +++ struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleSelect-4.txt Sat Apr 25 06:07:58 2009 @@ -0,0 +1,41 @@ +<tr> + <td class="tdLabel"><label for="foo" class="label">mylabel:</label></td> + <td> +<select name="foo" id="foo" class="c1" style="s1" onmousedown="window.status='onmousedown';" onmouseup="window.status='onmouseup';" onmouseover="window.status='onmouseover';" onmousemove="window.status='onmousemove';" onmouseout="window.status='onmouseout';" onchange="fooRedirect(this.options.selectedIndex);window.status='onchange';"> + <option value="BE">Belgium</option> + <option value="FR">France</option> +</select> +<br/> +<select name="region" id="region" class="c2" style="s2"> +</select> +<script type="text/javascript"> + var fooGroup = new Array(2 + 0); + for (i = 0; i < (2 + 0); i++) + fooGroup[i] = new Array(); + + 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 (m = fooTemp.options.length - 1; m >= 0; m--) { + fooTemp.options[m] = null; + } + + for (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> + </td> +</tr>