Spring集成Freemarker:
applicationContext.xml
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="classpath:view/" />
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">0</prop>
<prop key="default_encoding">UTF-8</prop>
<prop key="number_format">0.##########</prop>
<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
<prop key="classic_compatible">true</prop>
<prop key="template_exception_handler">ignore</prop>
</props>
</property>
</bean>
spring-servlet.xml
<!--注入扫描-->
<context:component-scan base-package="com.zj.controller" />
<!-- 启动Spring MVC的注解功能 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<!-- 针对freemarker的视图配置 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true" />
<property name="prefix" value="" />
<property name="suffix" value=".ftl" />
<property name="contentType" value="text/html;charset=UTF-8"></property>
<property name="requestContextAttribute" value="request" />
<property name="exposeSpringMacroHelpers" value="true" />
<property name="exposeRequestAttributes" value="true" />
<property name="exposeSessionAttributes" value="true" />
</bean>
web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/config/spring/spring.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/config/spring/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
基本用法:
${user}
<#--=============if==================-->
<#if random gt 60>
成绩合格
<#elseif random gte 85>
成绩优秀
<#else>
不合格
</#if>
<#--===================include==================-->
<#include "abc.txt">
<#--====================遍历List===================-->
<#list userList as user>
${user_index+1}
用户名;${user.userName}
phone;${user.phone}
地址:${user.address}
<#--如果对时间进行格式化可以用:${user.date?string('yyyy-MM-dd')}-->
<#--====================共有几个用户=====================-->
<#if !user_has_next>
共有${userList?size}个用户
</#if>
</#list>
<#--============================排序测试=======================-->
<#list userList?sort_by("phone") as user>
用户名;${user.userName}
phone;${user.phone}
地址:${user.address}
<#if (user.userName == "taisuke")>
<#break>
</#if>
</#list>
<#--=========================宏指令=================-->
<#macro method a b c>
${a}===${b}====${c}
</#macro>
<@method "wjb" "wjb2" "wjb3"></@method>
<#--======================定义一个变量==================-->
<#assign email="163@qq.com">
${email}
SpringBoot配置Freemarer:
server:
port: 8080
session:
timeout: 300000
#============================freemarker配置=========================#
spring:
freemarker:
suffix: .html
template-loader-path: classpath:/templates/html/
charset: UTF-8
cache: false
expose-request-attributes: true
request-context-attribute: request
content-type: text/html
编写FreemarkerConfig类:
package com.pd.gch.commpents;
import com.pd.gch.utils.ViewFreeMarker;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Map;
@Component
public class FreeMarkerConfig {
@Autowired
private FreeMarkerConfigurer freeMarkerConfigurer;
@Bean
public Configuration getFreeMarkerConfiguration(){
return freeMarkerConfigurer.getConfiguration();
}
public void resolveMap(Map<String,String> model, String templateName){
try {
Template template = this.getFreeMarkerConfiguration().getTemplate(templateName);
template.setDateFormat("yyyy-MM-dd HH:mm:ss");
template.setDateFormat("yyyy-MM-dd");
template.setTimeFormat("HH:mm:ss");
template.process(model, new OutputStreamWriter(System.out));
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
}
}
@Bean
public FreeMarkerViewResolver freeMarkerViewResolver(){
FreeMarkerViewResolver freeMarkerViewResolver= new FreeMarkerViewResolver();
freeMarkerViewResolver.setContentType("text/html;charset=UTF-8");
freeMarkerViewResolver.setViewClass(new ViewFreeMarker().getClass());
return freeMarkerViewResolver;
}
}
配置全局path变量
public class ViewFreeMarker extends FreeMarkerView {
private static final String CONTEXT_PATH = "base";
@Override
protected void exposeHelpers(Map<String, Object> model, HttpServletRequest request) throws Exception {
model.put(CONTEXT_PATH, request.getContextPath());
super.exposeHelpers(model, request);
}
}
网友评论