是否可以從JTwig模板調用自定義函數(比如靜態方法)?如何在JTwig中調用自定義函數?
例如,在Thymeleaf框架中,我可以通過它的類的全名調用任何靜態方法。所以我正在尋找類似於JTwig的東西。
是否可以從JTwig模板調用自定義函數(比如靜態方法)?如何在JTwig中調用自定義函數?
例如,在Thymeleaf框架中,我可以通過它的類的全名調用任何靜態方法。所以我正在尋找類似於JTwig的東西。
我發現以下解決方案:
1)通過延伸org.jtwig.functions.SimpleJtwigFunction
2創建自己的功能)在擴展org.jtwig.environment.EnvironmentConfiguration
3註冊它)構建定製豆爲擴展配置和通它進入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>
這沒有很好的記錄,但在這裏在純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 %}
)
謝謝,但我有點困惑:它是如何從不同的是我已經寫在我的答案? :) – Andremoniy
這是一個Java代碼,你沒有發佈代碼:p我知道人們喜歡從SO複製/粘貼片段,所以這就是爲什麼;-) –