[ 
https://issues.apache.org/jira/browse/FREEMARKER-42?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15716767#comment-15716767
 ] 

Daniel Dekany commented on FREEMARKER-42:
-----------------------------------------

FTL doesn't work with Java types directly, it has its own simple type system, 
and the built-ins and operators operate on that. So utilizing that the 
underling wrapped object is a {{SortedSet}} would be a rather dirty thing. 
However, we can probably get away without that, because wrapped {{Set}}-s are 
{{#list}}-able, so {{?first}} could just start iterating over the value and 
stop after the first item. Surely then it also works with non-sorted sets too, 
which is not ideal, but then again, they are all {{#list}}-able already.

BTW, with the default object wrapper configuration, where the 
{{forceLegacyNonListCollections}} property is {{true}}, {{?first}} actually 
works on {{Set}}-s. But leaving {{forceLegacyNonListCollections}} on {{true}} 
is not recommended, it's only backward compatible.

> ?first sequence operator does not work for SortedSets
> -----------------------------------------------------
>
>                 Key: FREEMARKER-42
>                 URL: https://issues.apache.org/jira/browse/FREEMARKER-42
>             Project: Apache Freemarker
>          Issue Type: Bug
>    Affects Versions: 2.3.23
>         Environment: JBoss, Linux, JDK8
>            Reporter: David Greene
>            Priority: Minor
>
> ?first should work for SortedSets given that there's an actual .first() 
> method on the object.
> Offending line of code:
> {code}
> <a href="<@s.url action="index" report=(reportsMenu[key]?first).name 
> />"><@s.text name=key /></a>
> {code}
> Working alternative:
> {code}
> <a href="<@s.url action="index" report=(reportsMenu[key].first()).name 
> />"><@s.text name=key /></a>
> {code}
> Stacktrace:
> {code}
> 10:45:00,549 ERROR [freemarker.runtime] (http-0.0.0.0:8443-1) Error executing 
> FreeMarker template: freemarker.template.TemplateModelException: Underlying 
> collection is not a list, it's java.util.TreeSet
> ----
> FTL stack trace ("~" means nesting-related):
>               - Failed at: @s.url action="index" report=(reports...  [in 
> template "mx/widgets/modules/reports/menu/headeradminnavmenu.ftl" at line 12, 
> column 18]
>               - Reached through: @mx inc="menu/headeradminnavmenu"  [in 
> template "mx/macros/widgets.ftl" in macro "moduleHeaderWide" at line 667, 
> column 13]
>               - Reached through: @_widgets.moduleHeaderWide module="re...  
> [in template "mx/widgets/modules/reports/header.ftl" at line 1, column 1]
>               - Reached through: @mx inc="header"  [in template 
> "mx/decorators/default.ftl" at line 14, column 9]
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to