You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by "Ondra Žižka (JIRA)" <ji...@apache.org> on 2017/07/11 13:55:00 UTC

[jira] [Created] (FREEMARKER-61) ?sort_using with a Comparator parameter

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)