如何从Freemarker将值加载到Java中?

时间:2018-10-10 11:23:10

标签: java freemarker

我想在第二次生成Freemarker之前获取它的变量值。这可能吗?

我有以下Java代码:

        Template temp = cfg.getTemplate("template.html");
        Map<String, Object> data = new HashMap<>();

        RestClient rc = new RestClient();
        String id = "";//here i need "my_long_id_from_freemaker" value from Freemaker

        String response = rc.somemethod (id);//returns list of items

        data.put("items", response );

我的模板:

<#assign my_long_id_from_freemaker = "my_long_id_from_freemaker_value">
<div class="panel-body">
  <#list items as item>
 <p>${item.name}: ${item.id} <button type="button" id="${item.id}" >Details</button>
    </#list> 
</div>

在第一次生成页面之后,我希望能够更改“ my_long_id_from_freemaker”的值并刷新页面,这将引发对我的Java代码的另一次调用。

1 个答案:

答案 0 :(得分:1)

由于在处理(执行)模板之前需要模板中的值,因此解析模板后该值必须已经存在。为此,您可以使用以下命令启动模板:

<#ftl attributes={"my_long_id_from_freemaker": 123}>

,然后在Template对象上可以调用:

id = temp.getCustomAttribute("my_long_id_from_freemaker");