spring下使用free marker

spring下maven依赖

<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-context-supportartifactId>
    <version>4.1.4.RELEASEversion>
dependency>
<dependency>
    <groupId>org.freemarkergroupId>
    <artifactId>freemarkerartifactId>
    <version>2.3.20version>
dependency>

在applicationContent.xml配置
将视图获取器的bean配置为

<bean id="freeMarkerConfigurer"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="/WEB-INF/tpl/">property>
        <property name="defaultEncoding" value="utf-8" />
        <property name="freemarkerSettings">
            <props>
                <prop key="template_update_delay">1prop>
                <prop key="locale">zh_CNprop>
                <prop key="datetime_format">yyyy-MM-ddprop>
                <prop key="date_format">yyyy-MM-ddprop>
                <prop key="number_format">#.##prop>
            props>
        property>
    bean>

    <bean id="freeMarkerViewResolver"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="cache" value="true" />
        <property name="prefix" value="" />
        <property name="suffix" value=".tpl" />
        <property name="contentType" value="text/html;charset=UTF-8" />
        <property name="allowSessionOverride" value="true" />
        <property name="allowRequestOverride" value="true" />
        <property name="exposeSpringMacroHelpers" value="true" />
        <property name="exposeRequestAttributes" value="true" />
        <property name="exposeSessionAttributes" value="true" />
        <property name="requestContextAttribute" value="request" />
    bean>

在控制器直接返回视图

@RequestMapping("index")
public ModelAndView Select(SearchInfo searchInfo,ModelAndView modelAndView) {
        modelAndView.setViewName("index");
        try {
            List list = (List) getMethod("select", SearchInfo.class).invoke(service, searchInfo);
            modelAndView.addObject("list", list);
            return modelAndView;
        } catch (Exception e) {
            return modelAndView;
        }
}

在模板中

${user.name}   单值
<#list list as item >       遍历集合中的元素
    "red">${item}
${item_index}//下标 #list> ${myDate?date} 日期 ${myDate?time} 时间 ${myDate?datetime} 时间戳 ${objectArray[0]},${objectArray[1]},${objectArray[2]} 对象数组 key1=${map.key1},key2=${map.key2},key3=${map.key3} map访问 if判断 <#if strValue_index == 0> <#elseif !strValue_has_next> <#else> #if> swich < #switch value> < #case refValue>...<#break> < #case refValue>...<#break> < #default>... < /#switch>

关于页面静态化

//在这里我将页面静态化的步骤放入了一个工具类中,让其作为一个静态方法,方便多次调用
public class PageStatic {
    /**
     * 静态化页面,将模板渲染后,生成一个真是存在的文件
     * @param filePath  模板文件的路径
     * @param templateName  模板文件的名字
     * @param dataModelMap  要渲染的数据
     * @param destPath      生成后的 文件的位置
     * @throws Exception
     */
    public static void staticPage(String filePath,String templateName,Map dataModelMap,String destPath) throws Exception {
        // 第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。
        Configuration configuration = new Configuration();
         // 第二步:设置模板文件所在的路径。
        configuration.setDirectoryForTemplateLoading(new File(filePath));
        // 第三步:设置模板文件使用的字符集。一般就是utf-8.
        configuration.setDefaultEncoding("utf-8");
        // 第四步:加载一个模板,创建一个模板对象。
        Template template = configuration.getTemplate(templateName);
        // 第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。
        // Map dataModel = new HashMap();
        // 向数据集中添加数据
        // dataModel.put("hello", "this is my first freemarker test.");
        // 第六步:创建一个Writer对象,一般创建一FileWriter对象,指定生成的文件名。
        Writer out = new FileWriter(new File(destPath));
        System.out.println("已创建"+destPath);
        // 第七步:调用模板对象的process方法输出文件
        template.process(dataModelMap, out);
        System.out.println("已输出");
        // 第八步:关闭流。
        out.close();

    }
}

在控制器中使用

@RequestMapping("index")
public String Select(SearchInfo searchInfo,HttpServletRequest req) {
    try {
        //获取数据
        List list = (List) getMethod("select", SearchInfo.class).invoke(service, searchInfo);
        HashMap<String, List> map = new HashMap<String, List>();
        map.put("list", list);
        //获取模板所在的位置
        File file = new File(req.getServletContext().getRealPath("/WEB-INF/ftl/"));
        //静态化页面生成的位置
        File destFile = new File(req.getServletContext().getRealPath("/staticHtml/"));
        //静态化页面
        String destPath = destFile.getPath()+"/index.html";
        //生成静态页面
        PageStatic.staticPage(file.getPath(), "index.ftl", map, destPath );
        //重定向到静态化页面
        return "redirect:/staticHtml/index.html";
    } catch (Exception e) {
        return "redirect:/staticHtml/index.html";
    }
}

你可能感兴趣的:(java)