使用freemarker对模板进行渲染

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使⽤freemarker对模板进⾏渲染

最近项⽬中使⽤到了,对word模板进⾏编辑和渲染,所以使⽤到了模板引擎技术。

在项⽬中,我们前端使⽤的富⽂本编辑器,进⾏展⽰和保存(和word格式⼀致),后端采⽤了freemarker进⾏数据的渲染。前端,就不多说了,处理很简单,只有⼀个展⽰,⼀个保存操作。

后台,需要获取模板和数据,进⾏渲染后返回到前台,进⾏展⽰。

⽬前实现了输⼊字符串和输⼊⽂件两种形式。(20180409)

freemark技术的整合和使⽤如下:

1.引⼊maven依赖

<!-- https:///artifact/org.freemarker/freemarker -->

<dependency>

<groupId>org.freemarker</groupId>

<artifactId>freemarker</artifactId>

<version>2.3.23</version>

</dependency>

2.封装为utils⼯具类使⽤

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileOutputStream;

import java.io.OutputStreamWriter;

import java.io.StringWriter;

import java.util.HashMap;

import java.util.Map;

import org.apache.log4j.PropertyConfigurator;

import com.winning.Application;

import com.winning.polaris.admin.service.impl.UpgradeServiceImpl;

import m.util.LogUtil;

import freemarker.cache.StringTemplateLoader;

import freemarker.template.Configuration;

import freemarker.template.Template;

public class FreemarkerUtils {

private static LogUtil logger = LogUtil.getInstance(UpgradeServiceImpl.class);

private static String defaultCharacter = "UTF-8";

private static Configuration cfg;

private FreemarkerUtils() {

}

static {

cfg = new Configuration(Configuration.getVersion());

cfg.setDefaultEncoding(defaultCharacter);

cfg.setTagSyntax(Configuration.AUTO_DETECT_TAG_SYNTAX);

}

/**

* 对模板进⾏渲染

* @param data 数据Map

* @param tplStr 模板

* @return

*/

public static String generateString(

Map<String, Object> data, String tplStr) {

String result = null;

String name="myStrTpl";

try {

StringTemplateLoader stringTemplateLoader= new StringTemplateLoader();

stringTemplateLoader.putTemplate(name, tplStr);

cfg.setTemplateLoader(stringTemplateLoader);

Template template = cfg.getTemplate(name,defaultCharacter);

StringWriter out = new StringWriter();

template.process(data, out);

out.flush();

result= out.toString();

out.close();

} catch (Exception e) {

e.printStackTrace();

}

return result;

}

/**

* 将模板渲染以后保存到⽂件

* @param templateFileDir 模板⽬录

* @param fileName 模板⽂件名称

* @param targetFilePath 渲染后⽂件名称

* @param dataMap 数据

* @return

*/

public static boolean renderingTemplateAndGenerateFile(String templateFileDir,

String fileName,String targetFilePath,Map<String, Object> dataMap){

boolean flag=true;

try {

// 设置⽂件所在⽬录的路径

cfg.setDirectoryForTemplateLoading(new File(templateFileDir));//模板路径

// 获取模版

Template template = cfg.getTemplate(fileName);

// 设置输出⽂件名,和保存路径

File outFile = new File(targetFilePath);

// 将模板和数据模型合并⽣成⽂件重点设置编码集

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));

// ⽣成⽂件

template.process(dataMap, out);

// 关闭流

out.flush();

out.close();

} catch (Exception e) {

logger.error("⽣产模板⽂件失败!",e);

flag=false;

}

return flag;

}

public static void main(String[] args) {

PropertyConfigurator.configure(Application.class.getClassLoader().getResourceAsStream("config" + File.separator + "log4j.properties"));

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

dataMap.put("APP_HOME", "c:/test/appHome");

//F:\freemark

boolean renderingTemplateAndGenerateFile = renderingTemplateAndGenerateFile("F:\\freemark\\", "temp.txt",

"F:\\freemark\\temp.bat",dataMap);

System.out.println(renderingTemplateAndGenerateFile);

}

}

3.单元测试

public class FreemarkerUtilsTest extends TestCase {

public void generateStringTest(){

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

map.put("date", "2017-05-11 11:55:55");

map.put("caseNo", "AJ00000001");

map.put("descrip", "这是描述信息==========");

String template="案件编号为:${caseNo!} "

+ " ⽇期为:${date!} "

+ " ⾃动获取⽇期为:${ .now?string('yyyy年MM⽉dd⽇')}"

+ "描述:${descrip!}";

String generateString = FreemarkerUtils.generateString(map, template);

System.out.println("------");

System.out.println(generateString);

}

}

结果:案件编号为:AJ00000001 ⽇期为:2017-05-11 11:55:55 ⾃动获取⽇期为:2018年01⽉29⽇描述:这是描述信息==========模板渲染完成。

当然,模板的渲染可以使⽤正则完成,但个⼈认为,模板引擎就是⼲这个的,⽽且各种情况考虑更为全⾯。

相关文档
最新文档