[ 
https://issues.apache.org/struts/browse/WW-2156?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=43858#action_43858
 ] 

James Holmes commented on WW-2156:
----------------------------------

I have verified this issue and it is indeed a problem. It is also a problem for 
the Options Transfer Select component as well. In my opinion, the "name" 
attribute should be required on both of these tags. That would fix the problem. 
Any reason not to require the "name" attribute when we are already requiring 
the "doubleName" attribute? Why require "doubleName" if "name" isn't required? 
I'm not sure what the logic is there.

> double doubleselect without ids and name cause selection error
> --------------------------------------------------------------
>
>                 Key: WW-2156
>                 URL: https://issues.apache.org/struts/browse/WW-2156
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Plugin - Tags
>    Affects Versions: 2.0.9
>            Reporter: Yinghao LI
>             Fix For: 2.1.3
>
>
> When there are two doubleselect without id attributes, the selection of the 
> first's first select while change the options of the second's second select.
> The problem is :
> the name and the id of doubleselect aren't required attributes. When they are 
> both absent, the value of name and id is the form_name concat with "_". When 
> we use two or more doubleselect,  struts will create same variables and 
> function in javascript with the doubleselect.ftl in the simple template.
> Personnally, i think the id of doubleselect should use the doubleName's value 
> when there is neither id attribute nor name attribute.
> <script type="text/javascript">
> <#assign itemCount = startCount/>
>     var ${parameters.id}Group = new Array(${parameters.listSize} + 
> ${startCount});
>     for (i = 0; i < (${parameters.listSize} + ${startCount}); i++)
>     ${parameters.id}Group[i] = new Array();
> <@s.iterator value="parameters.list">
>     <#if parameters.listKey?exists>
>         <#assign itemKey = stack.findValue(parameters.listKey)/>
>     <#else>
>         <#assign itemKey = stack.findValue('top')/>
>     </#if>
>     <#if parameters.listValue?exists>
>         <#assign itemValue = stack.findString(parameters.listValue)/>
>     <#else>
>         <#assign itemValue = stack.findString('top')/>
>     </#if>
>     <#assign doubleItemCount = 0/>
>     <@s.iterator value="${parameters.doubleList}">
>         <#if parameters.doubleListKey?exists>
>             <#assign doubleItemKey = 
> stack.findValue(parameters.doubleListKey)/>
>         <#else>
>             <#assign doubleItemKey = stack.findValue('top')/>
>         </#if>
>         <#assign doubleItemKeyStr = doubleItemKey.toString() />
>         <#if parameters.doubleListValue?exists>
>             <#assign doubleItemValue = 
> stack.findString(parameters.doubleListValue)/>
>         <#else>
>             <#assign doubleItemValue = stack.findString('top')/>
>         </#if>
>     ${parameters.id}Group[${itemCount}][${doubleItemCount}] = new 
> Option("${doubleItemValue}", "${doubleItemKeyStr}");
>         <#assign doubleItemCount = doubleItemCount + 1/>
>     </@s.iterator>
>     <#assign itemCount = itemCount + 1/>
> </@s.iterator>
>     var ${parameters.id}Temp = 
> document.${parameters.formName}.${parameters.doubleId};
> <#assign itemCount = startCount/>
> <#assign redirectTo = 0/>
> <@s.iterator value="parameters.list">
>     <#if parameters.listKey?exists>
>         <#assign itemKey = stack.findValue(parameters.listKey)/>
>     <#else>
>         <#assign itemKey = stack.findValue('top')/>
>     </#if>
>     <#if tag.contains(parameters.nameValue, itemKey)>
>         <#assign redirectTo = itemCount/>
>     </#if>
>     <#assign itemCount = itemCount + 1/>
> </@s.iterator>
>     ${parameters.id}Redirect(${redirectTo});
>     function ${parameters.id}Redirect(x) {
>       var selected = false;
>         for (m = ${parameters.id}Temp.options.length - 1; m >= 0; m--) {
>             ${parameters.id}Temp.options[m] = null;
>         }
>         for (i = 0; i < ${parameters.id}Group[x].length; i++) {
>             ${parameters.id}Temp.options[i] = new 
> Option(${parameters.id}Group[x][i].text, ${parameters.id}Group[x][i].value);
>             <#if parameters.doubleNameValue?exists>
>               if (${parameters.id}Temp.options[i].value == 
> '${parameters.doubleNameValue}') {
>                       ${parameters.id}Temp.options[i].selected = true;
>                       selected = true;
>               }
>             </#if>
>         }
>         if ((${parameters.id}Temp.options.length > 0) && (! selected)) {
>               ${parameters.id}Temp.options[0].selected = true;
>         }
>     }
> </script>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to