簡體   English   中英

如何在JTwig中調用自定義函數?

[英]How to invoke custom functions in JTwig?

是否可以從JTwig模板調用自定義函數(例如靜態方法)?

例如,在Thymeleaf框架中,我可以通過其類的全名來調用任何靜態方法。 所以我正在為JTwig尋找類似的東西。

這沒有很好的文檔記錄,但是這里是純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 %}
)

我發現以下解決方案:

1)通過擴展org.jtwig.functions.SimpleJtwigFunction創建自己的函數

2)在擴展的org.jtwig.environment.EnvironmentConfiguration注冊

3)為擴展配置構造自定義bean,並將其傳遞到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>

我在理解第一個答案時遇到了一些問題,因此我對其進行了一些更改...

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

        @Override
        public   Object execute(FunctionRequest request) {
            String value1 = "a Problem";
             if (request.getNumberOfArguments() == 1) {
                 if (request.get(0) instanceof String) {
                     value1 = request.getEnvironment().getValueEnvironment().getStringConverter().convert(request.get(0));
                 }
             }

            return ("This is: "+value1);
        }
    };

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


        String templatenamex = defaultpath + templatename;
        JtwigTemplate template = JtwigTemplate.classpathTemplate(templatename,configuration);
        JtwigModel model = JtwigModel.newModel();

        for (String key : map.keySet()) {
            model.with(key, map.get(key));// .replace("\"", "\\\""));
        }

        String resultx = template.render(model);

並在模板中

{{translation(“ go”)}}

創建:

這是:去

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM