2017-01-12 2 views
0

Est-il possible d'appeler une fonction personnalisée (par exemple une méthode statique) à partir du modèle JTwig? Par exemple, dans le framework Thymeleaf, je peux appeler n'importe quelle méthode statique via le nom complet de sa classe. Donc je cherche quelque chose de similaire pour JTwig.Comment appeler des fonctions personnalisées dans JTwig?

Répondre

1

j'ai trouvé la solution suivante:

1) créer propre fonction via extension org.jtwig.functions.SimpleJtwigFunction

2) enregistrer dans étendue org.jtwig.environment.EnvironmentConfiguration

3) construire haricot personnalisé pour la configuration étendue et passe dans le JtwigViewResolver:

<bean id="jtwigDec" class="...ExtendedEnvironmentConfiguration"/> 

<bean id="jtwigRenderer" class="org.jtwig.web.servlet.JtwigRenderer"> 
    <constructor-arg ref="jtwigDec"/> 
</bean> 

<bean class="org.jtwig.spring.JtwigViewResolver"> 
    ... 
    <property name="renderer" ref="jtwigRenderer"/> 
</bean> 
2

Ceci n'est pas bien documenté, mais ici un extrait en Java pur:

final SimpleJtwigFunction myFunction = new SimpleJtwigFunction() { 
      @Override 
      public String name() { 
       return "get_type"; 
      } 

      @Override 
      public Object execute(FunctionRequest functionRequest) { 
       return "toto"; 
      } 
     }; 

final EnvironmentConfiguration configuration = EnvironmentConfigurationBuilder 
      .configuration() 
      .functions() 
       .add(myFunction) 
      .and() 
     .build(); 

final JtwigTemplate template = JtwigTemplate.classpathTemplate("hive_create_table.sql.twig", configuration); 

et modèle:

CREATE EXTERNAL TABLE sample2(
{% for field in fields%}{% if field.name != "serialVersionUID" %} 
`{{ field.name }}`:{{ field.type | get_type | upper }},{% endif %}{% endfor %} 
) 
+0

Merci, mais je suis peu confus au sujet: comment est-il différent de ce que je l'ai écrit dans ma réponse? :) – Andremoniy

+0

C'est un code Java, vous n'avez pas envoyé de code: p Je sais que les gens aiment copier/coller extrait de SO, alors c'est pourquoi ;-) –