Author: rgielen Date: Tue Feb 20 14:35:31 2007 New Revision: 509780 URL: http://svn.apache.org/viewvc?view=rev&rev=509780 Log: WW-1747 / WW-1711: Working with real types rather than String representations as long as possible should fix both issues with select tag. Additional test added and verified.
Added: struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-12.txt Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/ContainUtil.java struts/struts2/trunk/core/src/main/resources/template/simple/select.ftl struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/SelectTest.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/ContainUtil.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/ContainUtil.java?view=diff&rev=509780&r1=509779&r2=509780 ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/ContainUtil.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/ContainUtil.java Tue Feb 20 14:35:31 2007 @@ -80,7 +80,7 @@ return true; } } else if (obj1 instanceof Collection) { - if (((Collection) obj1).contains(obj2)) { + if (((Collection) obj1).contains(obj2) || ((Collection) obj1).contains(obj2.toString())) { //log.debug("obj1 is a collection and contains obj2"); return true; } Modified: struts/struts2/trunk/core/src/main/resources/template/simple/select.ftl URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/template/simple/select.ftl?view=diff&rev=509780&r1=509779&r2=509780 ============================================================================== --- struts/struts2/trunk/core/src/main/resources/template/simple/select.ftl (original) +++ struts/struts2/trunk/core/src/main/resources/template/simple/select.ftl Tue Feb 20 14:35:31 2007 @@ -39,13 +39,13 @@ </#if> <@s.iterator value="parameters.list"> <#if parameters.listKey?exists> - <#if stack.findString(parameters.listKey)?exists> - <#assign itemKey = stack.findString(parameters.listKey).toString()/> + <#if stack.findValue(parameters.listKey)?exists> + <#assign itemKey = stack.findValue(parameters.listKey)/> <#else> <#assign itemKey = ''/> </#if> <#else> - <#assign itemKey = stack.findValue('top').toString()/> + <#assign itemKey = stack.findValue('top')/> </#if> <#if parameters.listValue?exists> <#if stack.findString(parameters.listValue)?exists> @@ -57,7 +57,7 @@ <#assign itemValue = stack.findString('top')/> </#if> <option value="${itemKey?html}"<#rt/> - <#if tag.contains(parameters.nameValue, itemKey) == true || (parameters.nameValue?exists && parameters.nameValue?string == itemKey)> + <#if tag.contains(parameters.nameValue, itemKey) == true || (parameters.nameValue?exists && parameters.nameValue?string == itemKey?string)> selected="selected"<#rt/> </#if> >${itemValue?html}</option><#lt/> Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/SelectTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/SelectTest.java?view=diff&rev=509780&r1=509779&r2=509780 ============================================================================== --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/SelectTest.java (original) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/SelectTest.java Tue Feb 20 14:35:31 2007 @@ -170,6 +170,33 @@ } } + public class LongObject { + private Long id; + private String value; + + + public LongObject(Long id, String value) { + this.id = id; + this.value = value; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + public void testNullList() throws Exception { TestAction testAction = (TestAction) action; testAction.setList2(null); @@ -237,6 +264,44 @@ tag.doEndTag(); verify(SelectTag.class.getResource("Select-2.txt")); + } + + /** + * WW-1747 - should be a valid test case for the described issue + * @throws Exception + */ + public void testMultipleWithLists() throws Exception { + TestAction testAction = (TestAction) action; + Collection collection = new ArrayList(2); + + collection.add(1l); + collection.add(3l); + testAction.setCollection(collection); + + List selectList = new ArrayList(); + selectList.add(new LongObject(1l, "foo")); + selectList.add(new LongObject(2l, "bar")); + selectList.add(new LongObject(3l, "foobar")); + testAction.setList2(selectList); + + SelectTag tag = new SelectTag(); + tag.setPageContext(pageContext); + tag.setLabel("mylabel"); + tag.setName("collection"); + tag.setList("list2"); + tag.setListKey("id"); + tag.setListValue("value"); + tag.setMultiple("true"); + tag.setOnmousedown("alert('onmousedown');"); + tag.setOnmousemove("alert('onmousemove');"); + tag.setOnmouseout("alert('onmouseout');"); + tag.setOnmouseover("alert('onmouseover');"); + tag.setOnmouseup("alert('onmouseup');"); + + tag.doStartTag(); + tag.doEndTag(); + + verify(SelectTag.class.getResource("Select-12.txt")); } public void testSimple() throws Exception { Added: struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-12.txt URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-12.txt?view=auto&rev=509780 ============================================================================== --- struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-12.txt (added) +++ struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Select-12.txt Tue Feb 20 14:35:31 2007 @@ -0,0 +1,8 @@ +<tr> + <td class="tdLabel"><label for="collection" class="label">mylabel:</label></td> + <td><select name="collection" id="collection" multiple="multiple" onmousedown="alert('onmousedown');" onmouseup="alert('onmouseup');" onmouseover="alert('onmouseover');" onmousemove="alert('onmousemove');" onmouseout="alert('onmouseout');"> + <option value="1" selected="selected">foo</option> + <option value="2">bar</option> + <option value="3" selected="selected">foobar</option> +</select></td> +</tr>