当前位置: 首页 > 知识库问答 >
问题:

我可以将String[]的列表传递到FreeMarker吗?

严稳
2023-03-14

我使用freemarker处理的数据模型是

Map<String, Object> templateDataModel = new HashMap<>();

我有一个字符串数组列表,我想像这样传递到这个映射中:

ArrayList<String[]> listOfServers = new ArrayList<>();

for (Server server : object.getServers) {
    String[] ser = new String[2];
    //get the name
    ser[0] = server.getName();
    //get the port
    ser[1] = server.getPort();

    lostOfServers.add(ser);
}

templateDataModel.put(serverList, listOfServers);
<#list serverList as server>
    <tr>
        <td>${server[0]}</th>
    </tr>
    <tr>
        <td>${server[1]}</th>
    </tr>
</#list>

我在输出中得到以下消息:

freemarker.template.DefaultObjectWrapper didn't convert java.util.ArrayList to a TemplateHashModel. 
Generally, you want to use a Map<String, Object> or a JavaBean as the root-map (aka. data-model) parameter. The Map key-s or JavaBean property names will be the variable names in the template.

看来我做不到。这是正确的吗?如果是这样的话,FreeMarker支持的数据结构有什么建议吗?

我是Java新手,正在阅读FreeMarker。请原谅任何基本的事情我不明白,但我真的很想让这个自由营销的东西工作。

Map<String, List<List<String>>>
Map<String, List<String[]>>

模板现在看起来如下所示:

<#list serverEntries as serverEntry>
    <tr>
        <#list serverEntry as serverAttribute>
            <td>${serverAttribute}</th>
        </#list>
    </tr>
</#list>

共有1个答案

宁卓
2023-03-14

从错误消息中可以看出,您将ListofServers(或其他一些ArrayList)传递给Template.process(或Environment.process),而不是TemplateDataModel

 类似资料:
  • 我有一个插件,它的配置中有一个列表: 的内容将根据当前配置文件进行更改。现在,我正在一个配置文件中复制插件定义,这感觉有点浪费。我真正想要的是将一组项定义为一个属性: 但是,如果我尝试上面的操作,那么Maven会出现一个错误: 是否有一种方法可以将列表从Maven属性传递到插件配置中?

  • 有没有比传递分隔字符串并稍后解析它更优雅的方法来传递可选的整数列表到?我也有一个位置论点。 不工作,因为试图获取并抱怨它不是整数。 理想情况下,我想与其中一个执行 或者类似的东西,但也能

  • 问题内容: 当我尝试将Servlet中的列表值设置为会话变量并像JSP一样访问它时, 做得到 JSP 我在JSP中遇到错误,因为“列表无法解析为类型” 那我该怎么做呢?我想将列表从Servlet传递到JSP并填充一个下拉列表。 问题答案: 您要导入列表和演员表吗?

  • 我的数据结构如下所示: Foo的每个实例都可以包含任意数量的S,这当然反过来又可以包含更多的S等等。那么,我该如何让FreeMarker通过这样的列表呢?

  • 下面您将找到应该调用的函数,而不是: 我可以为这些自定义类型创建工厂,并根据值生成类型,而不是传递给的类型,或者传递一个字符串化的对象(对象/数组、更多的对象/数组)。但我想知道(尤其是后者,它让我发冷)是否真的有必要。文档只提到这个函数,作为向区块链提交事务的一种方式。 我应该用我的工厂解决方案吗?是否有另一个函数,我可以使用它来提交使用类型的事务?或者这不是我应该构造我的链码的方式,我应该考虑

  • 当我运行这些时,我将得到以下错误 使用FreeMarker模板转换输入消息时出错:对于“${...}”内容:需要一个字符串或自动转换为字符串(数字、日期或布尔值)或“模板输出”的东西,但它的计算结果是一个序列+哈希(包装器:f.e.dom.nodelistmodel):==>inp.leaf[在模板“support.ftl”中第2行,第3列] 如果我将字符串传递给支持的FTL而不是XML,模板就可