欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

FreeMarker使用

程序员文章站 2022-07-14 09:52:30
...

使用FreeMarker实现向ftl模板中添加数据

Java代码中实现向list中添加数据

JSONObject map  = new JSONObject();
map.put("username", username);//放入map中
map.put("maxputoutdays", maxputoutdays);//放入map中

JSONObject result = new JSONObject();
JSONArray retArray = new JSONArray();
retArray.add(map);
result.put("array", retArray);//array提供为页面使用
//greatTempFile方法是将result里面的数据填充到projectdesc.ftl模板
ProjectDescToStringUtil.greatTempFile(null, result,"projectdesc.ftl");

ProjectDescToStringUtil工具类实现数据填充到模板

  • 需要jar包支持
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
</dependency>
  • 代码实现
public static String greatTempFile(HttpServletRequest request, JSONObject object,String templateFileName) {
        StringWriter writer = null;
        try {

            Configuration cfg = new Configuration();

            String url = ProjectDescToStringUtil.class.getClassLoader().getResource("/").getPath();
            //动态获取path
            String path = url.substring(url.indexOf("/"), url.lastIndexOf("/classes"))+"/ftl";;

            File dir = new File(path);
            cfg.setDirectoryForTemplateLoading(dir);
            Template t = cfg.getTemplate(templateFileName, "UTF-8"); // 模板文件名
            writer = new StringWriter();

            t.process(object, writer);

        } catch (Exception e) {
           //出异常,记录日志
        }

        return writer.toString();

    }

ftl模板中取值

  • 获取传递变量值:${item.username!},使用!防止空值报错

ftl模板中使用判断语句

  • <#if condition>中的condition条件应直接使用item.maxputoutdays取值,不能使用$符号类似这种${item.maxputoutdays!},负责会报错,无法识别。
<#list array as item> <#if item.maxputoutdays == '0'>满标当日
<#elseif item.maxputoutdays == '1'>满标次日
<#else>
满标第${item.maxputoutdays!}日
</#if>
</#list> 
  • 代码中的array类型为JSONObject extends HashMap implements Map
  • JSONArray extends ArrayList implements List

ftl模板制作(Windows环境)

  • 新建一个普通的txt文档,修改后缀为ftl即可
  • 以下为一个简单的ftl模板,内容为html代码片段
<#list array as item>
    <ul class="tabs">
        <li id="decsearch">
            <table width="500" border="1"
                style="border-collapse: collapse; border-spacing: 0; line-height: 30px;">
                <tr>
                    <td style="text-align: center;">借款用途</td>
                    <td style="padding-left: 5px;">${item.loanPurpose!}</td>
                </tr>
                <tr>
                    <td style="text-align: center;">募集期</td>
                    <td style="padding-left: 5px;">${item.investday!}天</td>
                </tr>
                <tr>
                    <td style="text-align: center;">起息日</td>
                    <td style="padding-left: 5px;">
                        <#if item.maxputoutdays == '0'>
                          募集满标当日
                        <#elseif item.maxputoutdays == '1'>
                         募集满标次日
                        <#else>
                          募集满标第${item.maxputoutdays!}日
                        </#if>
                    </td>
                </tr>
            </table>
        </li>
    </ul>
</#list>
相关标签: freemarker