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

如何从Freemarker将值加载到Java中?,java,freemarker,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 "m

我想在第二次生成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 );
Template temp=cfg.getTemplate(“Template.html”);
映射数据=新的HashMap();
RestClient rc=新的RestClient();
字符串id=“”//这里我需要freemaker的“my_long_id_from_freemaker”值
字符串响应=rc.somemethod(id)//返回项目列表
数据。放置(“项目”,响应);
我的模板:

<#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>

${item.name}:${item.id}详细信息

第一次生成页面后,我希望能够更改“my_long_id_from_freemaker”的值,并刷新页面,以启动对java代码的另一次调用。

由于在处理(执行)模板之前需要模板中的值,因此解析模板后该值必须已经存在。为此,您可以从以下内容开始创建模板:

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

为什么不创建一个对象,用一个方法改变它的值呢?然后将其与
项一起传递到
数据中
?然后可以从freemarker模板调用该方法。(请注意,这并不是真正推荐的,像这样的逻辑应该从Java代码中完成,并且您的模板中应该只有表示逻辑。)感谢@jbx的观点。这样做对我来说已经足够了。
id = temp.getCustomAttribute("my_long_id_from_freemaker");