2015-08-18 10 views
5

Kennt jemand irgendwelche Pläne, die neue java.time API in FreeMarker zu unterstützen? Oder hat jemand Code für unterstützende Klassen wie ZonedDateTime, LocalDateTime und Instant?Java.time (Java 8) Unterstützung in Freemarker

Es ist nicht schwer zu sehen, wie diese Dinge selbst zu implementieren, aber es ist eigentlich eine ziemlich große Aufgabe.

+0

Was wollen Sie damit zu tun? – Goose

Antwort

2

Niemand beschäftigt sich damit (2.3.24), obwohl es bekannt ist, dass es fehlt. Es wird wahrscheinlich nicht trivial sein, es richtig zu machen, es sei denn, dass Java-8-Datums-/Zeit-Typen zu java.util.Date -s degradiert werden, wenn sie von TemplateDateModel zurückgegeben werden, ist akzeptabel.

BTW, ich habe dies zu http://freemarker.org/contribute.html hinzugefügt, so dass es nicht vergessen wird.

+2

Thnx für das Hinzufügen. Ich denke, dass der Abbau zu java.util.Date ein großer Schritt in die falsche Richtung sein wird. Kommentare im Quellcode argumentieren, dass ein Großteil der Komplexität des Datums durch die Tatsache verursacht wird, dass java.util.Date keine gute Möglichkeit bietet, nur Zeitstempel, Daten und so weiter zu verarbeiten. Ich arbeite an einem neuen Satz von TemplateModels und einem neuen ObjectWrapper, die alle java.time Objekte unterstützen und sicherstellen, dass sie korrekt formatiert sind. Dies ist der einzige Weg, um es in dem Moment zu lösen, denke ich? Ich werde einige weitere Informationen darüber veröffentlichen, wenn es fertig ist. Ich schätze, wir können es auf GitHub öffnen. –

+1

Nur ein kleiner Fehler in der Seite contribute.html. Du hast "Support für Java 8 data/time API-s" geschrieben. Ich denke du hast "Unterstützung für Java 8 Datum/Zeit API-s";) –

+0

Danke, Tippfehler behoben. Wie man das löst ... sicherlich beginnt es mit neuen DataModel-Schnittstellen. Das sind also neue Typen in FTL, die entsprechend den Konfigurationseinstellungen in String konvertiert werden müssen. Auch die Datum/Uhrzeit-Einbauten müssen vielleicht in der Lage sein, mit diesen neuen Typen umzugehen ... Es ist also eine ziemliche Arbeit. (Es wird auch etwas Hässlichkeit geben, da FreeMarker auf Java 5 laufen muss.) – ddekany

4

Nehmen wir an, dass Sie neue Datum formatieren/Zeit-Objekte

  1. benutzerdefinierte Methode erstellen:

    public static class FormatDateTimeMethodModel 
         implements TemplateMethodModelEx { 
        public Object exec(List args) throws TemplateModelException { 
         if (args.size() != 2) { 
          throw new TemplateModelException("Wrong arguments"); 
         } 
         TemporalAccessor time = (TemporalAccessor) ((StringModel) args.get(0)).getWrappedObject(); 
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern(((SimpleScalar) args.get(1)).getAsString()); 
         return formatter.format(time); 
        } 
    } 
    
  2. diese Methode in Schablonenmodell Put:

    templateModel.put (“ formatDateTime ", neues FormatDateTimeMethodModel());

  3. und rufen Sie diese Methode in der Vorlage:

    $ {format (my_date, 'HH: mm')}

+1

So ziemlich, was los ist in https://github.com/amedia/freemarker-java-8 :) –

+0

@Autowired private FormatDateTimeMethodModel fdtmm ; @ModelAttribute ("formatDateTime") public FormatDateTimeMethodModel formatDateTime (Authentifizierungsauthentifizierung) { return fdtmm; } wenn Sie es in Freemarker Vorlagen verwenden möchten – Oleksii