FreeMarker工具类、FreeMarker与Spring集成工具类用法优缺点

一、原生的freemarker工具类。缺点:无法使用集成在spring容器里的一些插件,代码如下:

/**
 * 
 * free模板工具
 * @author everycoding.com
 */
public class FreeMarkerUtils {
    private static String templatePath;
    public static void init() {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        templatePath = request.getServletContext().getRealPath("/")+"WEB-INF/view";
    }
    
    public static String process(Map<String, Object> map,String templateName) {
        if (templatePath == null) {
            FreeMarkerUtils.init();
        }
        Configuration cfg = new Configuration();
        FileTemplateLoader loader = null;
        Writer out = null;
        try {
            // 根据模板路径得到模板加载器
            loader = new FileTemplateLoader(new File(templatePath));
            cfg.setTemplateLoader(loader);
            cfg.setEncoding(Locale.CHINA, "UTF-8");
            // 根据模板名字得到模板
            Template template = cfg.getTemplate(templateName+".ftl");
            template.setEncoding("UTF-8");
            // 将数据模型和模板合并(返回的out-String为填充内容后的模板文件)
            out = new StringWriter();
            template.process(map, out);
            return out.toString();
        } catch (IOException e) {
            //e.printStackTrace();
        } catch (TemplateException e) {
        //    e.printStackTrace();
        }finally {
            out = null;
        }
        return null;
    }
}

二、使用spring自身提供的freemarker工具类。优点:能有效使用集成在spring容器内的一些freemarker插件(推荐使用)

1. 先注入spring的freemarker配置项org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer

    @Autowired
    private FreeMarkerConfigurer freeMarkerConfigurer;

(切记在spring的xml文件中配置FreeMarkerConfigurer 整合spring的配置)

2. 获取freemarker模板,并使用spring集成工具类解析模板org.springframework.ui.freemarker.FreeMarkerTemplateUtils

    @RequestMapping("/ajaxUser")
    @ResponseBody
    public Object ajaxUser(Long userId) {
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("user", this.getUser(userId));
        JSONObject jo = new JSONObject();
        try {
            Template template = freeMarkerConfigurer.getConfiguration().getTemplate("user/detail.ftl");
            String html = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);
            jo.put("html", html);
        } catch (Exception e) {
            e.printStackTrace();
        }
        jo.put("status", 1);
        return jo;
    }


评论

*
*