Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.0.6
-
None
Description
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()?