1、创建maven工程并导入Freemarker的maven坐标
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
2、创建模板文件,Freemarker的模板文件后缀可以任意,一般建议为ftl。
3、创建属性文件freemarker.properties
out_put_path=D:/ideaProjects/health_parent/health_mobile/src/main/webapp/pages
4、Spring配置文件中配置
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<!--指定模板文件所在目录-->
<property name="templateLoaderPath" value="/WEB-INF/ftl/" />
<!--指定字符集-->
<property name="defaultEncoding" value="UTF-8" />
</bean>
<context:property-placeholder location="classpath:freemarker.properties"/>
5、生成静态页面
package com.itheima.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.constant.RedisConstant;
import com.itheima.dao.SetmealDao;
import com.itheima.entity.PageResult;
import com.itheima.entity.QueryPageBean;
import com.itheima.pojo.Setmeal;
import com.itheima.service.SetmealService;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import redis.clients.jedis.JedisPool;
import java.io.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by Administrator on 2020/11/10 0010.
*/
@Service(interfaceClass = SetmealService.class)
@Transactional
public class SetmealServiceImpl implements SetmealService{
@Autowired
private SetmealDao setmealDao;
@Autowired
private JedisPool jedisPool;
@Value("${out_put_path}")
private String outputpath;
@Autowired
private FreeMarkerConfigurer freeMarkerConfigurer;
public void add(Setmeal setmeal, Integer[] checkgroupIds) {
setmealDao.add(setmeal);
Map<String, Integer> map = null;
for (Integer checkgroupId : checkgroupIds) {
map = new HashMap<String, Integer>();
map.put("setmealId", setmeal.getId());
map.put("checkgroupId", checkgroupId);
setmealDao.addSetmealAndCheckgroup(map);
}
jedisPool.getResource().sadd(RedisConstant.SETMEAL_PIC_DB_RESOURCES, setmeal.getImg());
//新增套餐后需要重新生成静态页面
generateMobileStaticHtml();
}
private void generateMobileStaticHtml() {
List<Setmeal> list = findAll();
generateMobileStaticHtmlSetmeal(list);
generateMobileStaticHtmlSetmealDetails(list);
}
private void generateMobileStaticHtmlSetmeal(List<Setmeal> list) {
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("setmealList", list);
generateHtml("mobile_setmeal.ftl", "m_setmeal.html", dataMap);
}
private void generateMobileStaticHtmlSetmealDetails(List<Setmeal> list) {
for (Setmeal setmeal : list) {
Setmeal setmeal1 = findById(setmeal.getId());
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("setmeal", setmeal1);
generateHtml("mobile_setmeal_detail.ftl", "setmeal_detail_"+setmeal1.getId()+".html" , dataMap);
}
}
/**
* 生成html
* @param templateName
* @param htmlPageName
* @param dataMap
*/
private void generateHtml(String templateName, String htmlPageName, Map<String, Object> dataMap) {
Writer out = null;
try {
Configuration configuration = freeMarkerConfigurer.getConfiguration();
Template template = configuration.getTemplate(templateName);
File file = new File(outputpath + "\\" + htmlPageName);
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
template.process(dataMap, out);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public PageResult findPage(QueryPageBean queryPageBean) {
PageHelper.startPage(queryPageBean.getCurrentPage(), queryPageBean.getPageSize());
Page<Setmeal> page = setmealDao.findAll(queryPageBean.getQueryString());
return new PageResult(page.getTotal(), page.getResult());
}
public List<Setmeal> findAll() {
return setmealDao.findMobileAll();
}
public Setmeal findById(Integer id) {
return setmealDao.findById(id);
}
}