Uploaded image for project: 'Apache Freemarker'
  1. Apache Freemarker
  2. FREEMARKER-61

?sort_using with a Comparator parameter

    XMLWordPrintableJSON

Details

    • New Feature
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 2.3.26-incubating
    • None
    • engine
    • None

    Description

      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.

      public class SortByName implements Comparator { ... }
      
      myData.persons?sort_using("SortByName")
      

      This would be even better if it could pass parameters to the constructor:

      public class SortByName implements Comparator {
          public SortByName(boolean ladiesFirst) { ... }
      }
      
      myData.persons?sort_using("SortByName", [true])
      

      This would greatly leverage sorting in templates while not complicating the template syntax or cluttering ?sort_by.

      Thanks for considering.

      Attachments

        Activity

          People

            Unassigned Unassigned
            pekarna Ondra Žižka
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated: