#1  
Alt 07.01.2010
Benutzerbild von Kai
Kai Kai ist offline
Imabas-Entwickler
Admin
Oberguru
Registriert seit: 11.2003
Ort: Holzwickede
Beiträge: 2.755
Kai befindet sich auf einem aufstrebenden Ast
Standard Benutzerdefinierte FreeMarker Methode

Hier ein kleines Beispiel wie man eine Funktion implementiert die man dann direkt im FreeMarker-Template verwenden kann, hier ein simples "UpperCase"...

java Code:
  1. public class UpperCaseMethod implements TemplateMethodModel {
  2.  
  3.    @SuppressWarnings("unchecked")
  4.    @Override
  5.    public Object exec(List args) throws TemplateModelException {
  6.      
  7.       if (args.size() != 1)
  8.          throw new TemplateModelException("Wrong arguments");
  9.  
  10.       return ((String) args.get(0)).toUpperCase();
  11.    }
  12. }

Im Deklarationsteil beim ausführen des Templates:
java Code:
  1. root.put("upper", new UpperCaseMethod());

Im Template:
html Code:
    <td>${upper(image.caption)}</td>

An die Methode exec() werden vom Template aus generell Strings übergeben, sofern das Interface TemplateMethodModel genutzt wird.
__________________
Mit freundlichen Grüßen
Kai Brendel
Mit Zitat antworten
  #2  
Alt 10.01.2010
Benutzerbild von feuster
feuster feuster ist offline
Professional
Registriert seit: 12.2003
Ort: Barcelona
Beiträge: 235
feuster befindet sich auf einem aufstrebenden Ast
Standard AW: Benutzerdefinierte FreeMarker Methode

Und hier ein Beispiel, wenn man keinen String braucht, sondern ein richtiges Objekt.

Fast gleich wie das vorherige Beispiel, nur dass man TemplateMethodModelEx implementiert und sich dann mühsam ans übergebene Objekt herantasten muss.

java Code:
  1. public class FtlMethodPictureName implements TemplateMethodModelEx {
  2.    
  3.     @SuppressWarnings("unchecked")
  4.     @Override
  5.     public Object exec(List args) throws TemplateModelException {
  6.         if (args.size() != 1)
  7.             throw new TemplateModelException("Wrong number of arguments");
  8.        
  9.         if (DeepUnwrap.unwrap((TemplateModel) args.get(0)).getClass() != Bild.class )
  10.             throw new TemplateModelException("Argument not of class Bild");
  11.  
  12.         Bild bild = (Bild) DeepUnwrap.unwrap((TemplateModel) args.get(0));
  13.  
  14.         return StringEscapeUtils.escapeXml(bild.getCaptionExport().value());
  15.     }
  16. }

Wobei man dann natürlich beim Ausführen des Templates dafür sorgen muss, dass tatsächlich ein "Bild" übergeben wird
__________________
Thomas

bilder.feuster.com
Mit Zitat antworten
  #3  
Alt 11.01.2010
Benutzerbild von Kai
Kai Kai ist offline
Imabas-Entwickler
Admin
Oberguru
Registriert seit: 11.2003
Ort: Holzwickede
Beiträge: 2.755
Kai befindet sich auf einem aufstrebenden Ast
Standard AW: Benutzerdefinierte FreeMarker Methode

Hallo Thomas,
Zitat:
Zitat von feuster Beitrag anzeigen
if (DeepUnwrap.unwrap((TemplateModel) args.get(0)).getClass() != Bild.class )
wo bitte hast du das gefunden? Ich habe schon wie ein Depp danach gesucht Aber es war mir nicht gelungen. Habe zwar die Ex gefunden und konnte auch ein Bild übergeben, habe dann aber nur den "Zeiger" gehabt und kam nicht an das Objekt...

Zitat:
return StringEscapeUtils.escapeXml(bild.getCaptionExport( ).value());
Das kannst du auch im Template machen: ${bild.caption?html} Das macht die Methode flexibler, wenn man die Methode für einen anderen Export als HTML braucht...
__________________
Mit freundlichen Grüßen
Kai Brendel
Mit Zitat antworten
  #4  
Alt 11.01.2010
Benutzerbild von feuster
feuster feuster ist offline
Professional
Registriert seit: 12.2003
Ort: Barcelona
Beiträge: 235
feuster befindet sich auf einem aufstrebenden Ast
Standard AW: Benutzerdefinierte FreeMarker Methode

Zitat:
Zitat von Kai Beitrag anzeigen
Hallo Thomas,

wo bitte hast du das gefunden? Ich habe schon wie ein Depp danach gesucht Aber es war mir nicht gelungen. Habe zwar die Ex gefunden und konnte auch ein Bild übergeben, habe dann aber nur den "Zeiger" gehabt und kam nicht an das Objekt...
In der Javadoc von TemplateMethodModelEx steht ein ein unschuldiger Verweise auf "Further, if the implementation wishes to operate on POJOs that might be underlying the models, it can use the static utility methods in the DeepUnwrap class to easily obtain them. " Was einem so Sonntags nach dem Nachmittagsspaziergang äufällt

Zitat:
Zitat von Kai Beitrag anzeigen
Das kannst du auch im Template machen: ${bild.caption?html} Das macht die Methode flexibler, wenn man die Methode für einen anderen Export als HTML braucht...
Geht das auch mit XML-Escape? Zumindest bei Google-KML funktioniert nämlich HTML-Escape nicht bei Umlauten
__________________
Thomas

bilder.feuster.com
Mit Zitat antworten
  #5  
Alt 11.01.2010
Benutzerbild von Kai
Kai Kai ist offline
Imabas-Entwickler
Admin
Oberguru
Registriert seit: 11.2003
Ort: Holzwickede
Beiträge: 2.755
Kai befindet sich auf einem aufstrebenden Ast
Standard AW: Benutzerdefinierte FreeMarker Methode

Zitat:
Zitat von feuster Beitrag anzeigen
Geht das auch mit XML-Escape? Zumindest bei Google-KML funktioniert nämlich HTML-Escape nicht bei Umlauten
Kann Google nicht mit entsprechenden Encodings umgehen? Also wenn du oben in den Header der XML ein encoding="ISO-8859-1" schreibst, sollten die Umlaute kein Problem sein, oder?

Weil wenn du nichts schreibst, ist UTF-8 angesagt, und da stören deine Umlaute natürlich...
__________________
Mit freundlichen Grüßen
Kai Brendel
Mit Zitat antworten
  #6  
Alt 11.01.2010
Benutzerbild von feuster
feuster feuster ist offline
Professional
Registriert seit: 12.2003
Ort: Barcelona
Beiträge: 235
feuster befindet sich auf einem aufstrebenden Ast
Standard AW: Benutzerdefinierte FreeMarker Methode

Das muss ich mal versuchen! Meine Kopiervorlage einer gültigen KML-Datei nutzt natürlich UTF-8...
__________________
Thomas

bilder.feuster.com
Mit Zitat antworten
  #7  
Alt 11.01.2010
Benutzerbild von feuster
feuster feuster ist offline
Professional
Registriert seit: 12.2003
Ort: Barcelona
Beiträge: 235
feuster befindet sich auf einem aufstrebenden Ast
Standard AW: Benutzerdefinierte FreeMarker Methode

Nope, auch ISO-8859-1 tut es nicht mit html-Escape. So wie es aussieht, muss in einer KML-Datei wirklich xml-Escape gemacht werden... Und ?xml gibts zwar auch, aber die scheinen beide keine Umlaute zu escapen, sondern nur <, >, &, ", '
__________________
Thomas

bilder.feuster.com
Mit Zitat antworten
  #8  
Alt 13.01.2010
Benutzerbild von Kai
Kai Kai ist offline
Imabas-Entwickler
Admin
Oberguru
Registriert seit: 11.2003
Ort: Holzwickede
Beiträge: 2.755
Kai befindet sich auf einem aufstrebenden Ast
Standard AW: Benutzerdefinierte FreeMarker Methode

Hallo Thomas,
also ich habe das gerade mit dem GPX-Manager mal probiert, da brauchen Umlaute nicht Escaped werden, wenn UTF-8 eingestellt ist und die Umlaute entsprechend als UTF-8 eingetragen sind... Probier das mal mit einem Wegpunkt und Umlauten aus...

Was evtl. noch sein könnte, beim Freemarker kann man auch ein Encoding einstellen, vielleicht da mal was probieren?
__________________
Mit freundlichen Grüßen
Kai Brendel
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu


Powered by vBulletin® Version 3.7.1 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.