Ondra Žižka created FREEMARKER-61:
-------------------------------------
Summary: ?sort_using with a Comparator parameter
Key: FREEMARKER-61
URL: https://issues.apache.org/jira/browse/FREEMARKER-61
Project: Apache Freemarker
Issue Type: New Feature
Components: engine
Affects Versions: 2.3.26-incubating
Reporter: Ondra Žižka
Hi Daniel :)
I know that lists should be sorted before passing them to the template in
general.
In our case, the template is backed by a generic API for graph database which
gives an {{Iterable}} for any 1:N relation. So sorting needs to happen in the
template.
Now I'd like to sort that, for which the {{?sort_by(["...", "..."])}} is good
enough, except when it gets a bit more complicated - e.g. sometimes the values
are missing in which case it should sort by something else...
Doing that in a template is not a good idea, so I suggest this, elegant in my
opinion, solution:
First you'd have a Comparator in Java, and perhaps register it like you do with
{{FreemarkerMethod}}.
Then you could pass this as a parameter to {{?sort_using.}}
{code}
public class SortByName implements Comparator { ... }
myData.persons?sort_using("SortByName")
{code}
This would be even better if it could pass parameters to the constructor:
{code}
public class SortByName implements Comparator {
public SortByName(boolean ladiesFirst) { ... }
}
myData.persons?sort_using("SortByName", [true])
{code}
This would greatly leverage sorting in templates while not complicating the
template syntax or cluttering {{?sort_by}}.
Thanks for considering.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)