Freemaker初接触(五)导入公共ftl文件
来源:互联网 发布:hadoop数据目录配置 编辑:程序博客网 时间:2024/04/30 13:54
这是调用类
package com.joker.test;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class TestImport {
public static void main(String[] args) {
String templateLoaderPath = "/";
String templateName = "testImport.ftl";
Configuration cfg = new Configuration();
String htmlPath = "D:/freemakerTest";
String htmlName = "testimport.html";
Writer out = null;
Map<String, Object> parms = new HashMap<String, Object>();
User user1 = new User();
user1.setBorthDate(new Date());
HashMap<String, String>hashNames = new HashMap<String,String>();
hashNames.put("1", "name1");
hashNames.put("2", "name2");
hashNames.put("3", "name3");
user1.setHashNames(hashNames);
parms.put("user", user1);
ArrayList<User> users = new ArrayList<User>();
User user2 = new User();
user2.setId(2);
user2.setAge(2);
user2.setName("name2");
User user3 = new User();
user3.setId(3);
user3.setAge(3);
user3.setName("name3");
User user4 = new User();
user4.setId(4);
user4.setAge(4);
user4.setName("name4");
User user5 = new User();
user5.setId(5);
user5.setAge(5);
user5.setName("name5");
User user6 = new User();
user6.setId(6);
user6.setAge(6);
user6.setName("name6");
users.add(user2);
users.add(user3);
users.add(user4);
users.add(user5);
users.add(user6);
parms.put("users", users);
try {
cfg.setClassForTemplateLoading(TestMrco.class, templateLoaderPath);
Template temp = cfg.getTemplate(templateName);
out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(htmlPath + "/" + htmlName), "UTF-8"));
temp.process(parms, out);
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
} finally {
if (null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
public static void main(String[] args) {
String templateLoaderPath = "/";
String templateName = "testImport.ftl";
Configuration cfg = new Configuration();
String htmlPath = "D:/freemakerTest";
String htmlName = "testimport.html";
Writer out = null;
Map<String, Object> parms = new HashMap<String, Object>();
User user1 = new User();
user1.setBorthDate(new Date());
HashMap<String, String>hashNames = new HashMap<String,String>();
hashNames.put("1", "name1");
hashNames.put("2", "name2");
hashNames.put("3", "name3");
user1.setHashNames(hashNames);
parms.put("user", user1);
ArrayList<User> users = new ArrayList<User>();
User user2 = new User();
user2.setId(2);
user2.setAge(2);
user2.setName("name2");
User user3 = new User();
user3.setId(3);
user3.setAge(3);
user3.setName("name3");
User user4 = new User();
user4.setId(4);
user4.setAge(4);
user4.setName("name4");
User user5 = new User();
user5.setId(5);
user5.setAge(5);
user5.setName("name5");
User user6 = new User();
user6.setId(6);
user6.setAge(6);
user6.setName("name6");
users.add(user2);
users.add(user3);
users.add(user4);
users.add(user5);
users.add(user6);
parms.put("users", users);
try {
cfg.setClassForTemplateLoading(TestMrco.class, templateLoaderPath);
Template temp = cfg.getTemplate(templateName);
out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(htmlPath + "/" + htmlName), "UTF-8"));
temp.process(parms, out);
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
} finally {
if (null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
这是testImport.ftl
<#-- include的方式会将原数据覆盖
<#include "/fm1.ftl">
<#include "/fm2.ftl"/>
这样只会打印出fm2中的sameName值
${sameName}
-->
<#import "/fm1.ftl" as fm1 />
<#import "/fm2.ftl" as fm2/>
用空间命名去调用各自空间命名中的方法
<@fm1.test1 "123"></@fm1.test1>
<@fm2.test1 "123"></@fm2.test1>
${fm2.sameName}
${fm1.sameName}
<#assign testName="testImportName"/>
<#--可以在不同的命名空间中定义变量,相同的变量不会被覆盖-->
<#assign testName="testImportNameInFm1" in fm1/>
<#assign testName="testImportNameInFm2" in fm2/>
${testName}
<br>
${fm1.testName}
<br>
${fm2.testName}
<br>
<#include "/fm1.ftl">
<#include "/fm2.ftl"/>
这样只会打印出fm2中的sameName值
${sameName}
-->
<#import "/fm1.ftl" as fm1 />
<#import "/fm2.ftl" as fm2/>
用空间命名去调用各自空间命名中的方法
<@fm1.test1 "123"></@fm1.test1>
<@fm2.test1 "123"></@fm2.test1>
${fm2.sameName}
${fm1.sameName}
<#assign testName="testImportName"/>
<#--可以在不同的命名空间中定义变量,相同的变量不会被覆盖-->
<#assign testName="testImportNameInFm1" in fm1/>
<#assign testName="testImportNameInFm2" in fm2/>
${testName}
<br>
${fm1.testName}
<br>
${fm2.testName}
<br>
这是fm1.ftl的内容
<html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
</head>
<body>
<#macro test1 str>
<h1>${str}</h1>
</#macro>
<#assign sameName="sameNameinFm1"/>
</body>
</html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
</head>
<body>
<#macro test1 str>
<h1>${str}</h1>
</#macro>
<#assign sameName="sameNameinFm1"/>
</body>
</html>
这是fm2.ftl的内容
<html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
</head>
<body>
<#macro test1 str>
<h2>${str}</h2>
</#macro>
<#assign sameName="sameNameinFm2"/>
</body>
</html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
</head>
<body>
<#macro test1 str>
<h2>${str}</h2>
</#macro>
<#assign sameName="sameNameinFm2"/>
</body>
</html>
值得注意的是,fm1和fm2的内容如果有错误的话,导入会有问题的,一句话,所有的ftl文件都要保证正确。
ps :补充一下对el表达式中空的判断:例如${user.name??}可以判断user不为空,但是name为空的情况,但是如果user为空的话,这么写就会报错,所以对空的判断应该是逐级的。先判断user是否为空,再判断对应的属性。
0 0
- Freemaker初接触(五)导入公共ftl文件
- ftl文件 是什么文件 freemaker
- Freemaker初接触(二) 简单生成html文件
- 利用freemaker和ftl文件导出word带不开的问题
- Freemaker初接触(一) 集成SpringMVC问题
- FreeMaker FTL Tag
- 钩子初接触(五)
- Freemaker初接触(三)基本类型和list和map的遍历
- Freemaker初接触(四)宏的了解和变量的类型
- Freemaker FTL指令常用标签及语法
- eclipse 如何安装freemaker ftl 插件
- eclipse 如何安装freemaker ftl 插件记录
- Freemaker FTL指令常用标签及语法
- Freemaker FTL指令常用标签及语法
- Freemaker FTL指令常用标签及语法
- Freemaker FTL指令常用标签及语法
- ftl文件
- ftl文件
- 有哪些对树莓派 (Raspberry Pi) 的有趣改造、扩展应用?
- Infor XA ERP运维常用SQL
- 初学安卓路之CheckBox与RadioGroup
- APK瘦身记,如何实现高达53%的压缩效果
- linux 内存清理/释放命令
- Freemaker初接触(五)导入公共ftl文件
- 此应用程序当前处于脱机状态
- MATLIB 多个子文件夹批量创造测试文件
- 李彦宏笑对“百度是做外卖的”质疑:外卖的技术含量是不低的
- linux下SVN服务器搭建
- permission denied 错误
- ubuntu +pyCharm配置Django
- vi全局替换方法
- android 自定义多视图切换View