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