[ 
https://issues.apache.org/struts/browse/WW-1747?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_40233
 ] 

Rene Gielen commented on WW-1747:
---------------------------------

Thanks for reviewing and the patch. These changes in ContainUtil should bring 
it's function close to the original intention.
After applying the patch, I think we agree that the second test on String based 
equality in the template is no longer needed:
<#if tag.contains(parameters.nameValue, itemKey) == true || 
(parameters.nameValue?exists && parameters.nameValue?string == itemKey?string)>
should be 
<#if tag.contains(parameters.nameValue, itemKey) == true>
then.
I'll apply the patch.



> select tag doesn't work with "multiple" if list keys are not strings
> --------------------------------------------------------------------
>
>                 Key: WW-1747
>                 URL: https://issues.apache.org/struts/browse/WW-1747
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Views
>    Affects Versions: 2.0.6
>            Reporter: Stuart Piltch
>         Assigned To: Rene Gielen
>         Attachments: WW-1747.patch
>
>
> This is similar to WW-1711, but the fix included there doesn't handle the 
> case where the select tag has multiple="true" and the listKey is not a 
> string. In some cases, this can result in a freemarker syntax error:
> Expected number, date, or string. parameters.nameValue evaluated instead to 
> freemarker.ext.beans.ArrayModel
> I'll try to create a new test case that fails (the current multiple select 
> test passes in a array of Strings), then I'll attempt to find a more complete 
> fix. In the meantime, if anyone needs to get this working, a quick workaround 
> is to override the template/simple/select.ftl file and change this:
>         <#if tag.contains(parameters.nameValue, itemKey) == true || 
> (parameters.nameValue?exists && parameters.nameValue?string == itemKey)>
> to this:
>         <#if tag.contains(parameters.nameValue, itemKey) == true || 
>               (parameters.nameValue?exists && (parameters.nameValue?is_string 
> || parameters.nameValue?is_number) && 
>               parameters.nameValue?string == itemKey) >
> It still doesn't correctly pre-select values if the listKey isn't a string, 
> but at least it avoids the freemarker error. I'm not convinced that this is 
> the right long-term solution, so I didn't make it a source patch. It may be 
> useful to do so, though, if this doesn't get fixed soon.
> I think the correct fix here (and the cleaner fix for WW-1711) will be to 
> create a new contains() method that checks objects.toString() against the 
> strings (right now it only matches if the types match). But that's currently 
> done in OGNL. Maybe we need our own contains()?

-- 
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