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)

Reply via email to