2017-01-12 6 views
0

JTwigテンプレートからカスタム関数(静的メソッド)を呼び出すことは可能ですか?JTwigでカスタム関数を呼び出す方法は?

たとえば、Thymeleafフレームワークでは、そのクラスのフルネームで任意の静的メソッドを呼び出すことができます。だから、私はJTwigに似た何かを探しています。

1)org.jtwig.functions.SimpleJtwigFunction

2の延長を経て独自の関数を作成する)拡張org.jtwig.environment.EnvironmentConfiguration

3に登録)、拡張設定とパスのカスタムBeanを構築する:

答えて

1

私は、次の解決策を見つけましたこれは十分に文書化されていない

<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

が、ここで:JtwigViewResolverにそれピュアJavaでスニペット:

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); 

テンプレート:

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

おかげで、私はについて少し混乱しています:どのようにそれは私が私の答えに書いたものとは異なっていますか? :) – Andremoniy

+0

これはJavaコードです。あなたはコードを投稿しませんでした。私は人々がコピー&ペーストスニペットを愛していることを知っています。 –

関連する問題