Freemarker string

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Freemarker string相关的知识,希望对你有一定的参考价值。

情况是我的一个 Freemarker 变量需要进行换算. 但这个变量是string类型. 而我这里需要的是能进行 " + - * / " 的计算. 所以请问: freemarker 中 变量可以转换数据类型吗? 如果可以转,请把语法贴上. 谢谢

参考技术A String var = "123.4";<#if var?eval >=100>kkkk<#else></#if>就能在页面将string转成int或者double值 参考技术B 用java.lang.Double 包中的 public static double parseDouble(String s) 方法返回一个新的 double 值,该值被初始化为用指定 String 表示的值,这与 Double 类的 valueOf 方法一样。 具体就是这样用 Double.parseDouble(Freemarker);

我可以将 String[] 列表传递给 Freemarker 吗?

【中文标题】我可以将 String[] 列表传递给 Freemarker 吗?【英文标题】:Can I pass a List of String[] into Freemarker? 【发布时间】:2016-12-11 05:33:57 【问题描述】:

我用于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);

arraylist 背后的原因是服务器至少有 2 个数据点(在本例中为名称和端口),而字符串列表或其他集合无法容纳我需要的内容(如果我是错了)。

在我的 freeMarker 模板中,我想循环这个服务器列表并显示各种不同的值,如下所示:

<#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。请原谅我不理解的任何基本内容,但我真的很想让这个 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】:

从错误消息看来,您已将listOfServers(或其他一些ArrayList)传递给Template.process(或Environment.process),而不是templateDataModel

【讨论】:

我确认我正在将 Map 和 StringWriter 传递给 template.process 方法。感谢您的输入 我想知道是否有一个数组指令,或者如何制作一个 @Alan:错误消息表明您已通过ArrayList。也许您没有看到正确的Template.process 电话。检查堆栈跟踪中的调用位置。我不确定 Array 指令是什么意思。 这个目标就像在这篇文章中一样,Jimmy 能够调用 item.author、item.pubDate 等。我用来存储作者、pubDate、描述等的方法是使用ArrayList 传入 Map。也许这是错误的做法。我怎么能做到这一点? ***.com/questions/35468941/… 我会尝试 xml 作为数据模型

以上是关于Freemarker string的主要内容,如果未能解决你的问题,请参考以下文章

freemarker莫名报错

FreeMarker--01---简介环境搭建

如何用freemarker循环一个数字

FreeMarker开发-入门

FreeMarker语言

FreeMarker:什么是 FreeMarker?