2018-03-05
freemarker主要使用
模板引擎 评论:0 浏览:320

转载请注明出处:https://oldnoop.tech/c/134.html

Freemarker介绍

freemarker是一个模板引擎,

定义一个模板, 在模板里面使用一些标签来接收一些数据, 生成最终的文档

Freemarker集成springmvc

在MVC结构中,可以用在视图层,定义html模板,接收控制器层的数据,生成最终的页面

【说明:此处可以举例 springmvc + freemarker 如何集成, 说明springmvc的配置文件】

配置freemarker的视图解析器,

主要是配置视图页面文件的前缀,后缀

freemarker的配置bean(spring提供的集成freemarker的java类),

主要是配置模板文件夹路径,字符集,日期格式化等等

<bean id="freemarkerResolver"

class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">

<property name="viewClass"

value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"></property>

<property name="prefix" value="/ftl/" />

<property name="suffix" value=".html" />

<property name="contentType" value="text/html;charset=utf-8" />

<property name="exposeRequestAttributes" value="true" />

<property name="exposeSessionAttributes" value="true" />

<property name="exposeSpringMacroHelpers" value="true" />

<!-- 在存在多个视图解析器的情况下,优先使用哪个的优先级,优先使用 order值较小的视图解析器 -->

<!-- 这里优先使用freemarker的视图解析器(order值0), 没有再使用jsp的(order值1)-->

<property name="order" value="0" />

</bean>

 

<bean id="freemarkerConfig"

class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">

<property name="templateLoaderPath" value="/WEB-INF" />

<property name="freemarkerSettings">

<props>

<prop key="template_update_delay">0</prop>

<prop key="defaultEncoding">UTF-8</prop>

<prop key="url_escaping_charset">UTF-8</prop>

<prop key="locale">zh_CN</prop>

<prop key="boolean_format">true,false</prop>

<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>

<prop key="date_format">yyyy-MM-dd</prop>

<prop key="time_format">HH:mm:ss</prop>

<prop key="number_format">0.######</prop>

<prop key="whitespace_stripping">true</prop>

</props>

</property>

</bean>

freemarker拿到web根路径

Freeamker模板是静态化文件,拿不到jsp的内置对象,web根路径context path,需要单独处理

可以编写一个servlet,配置在web.xml中,启动的时候,将上下文路径contextpath,存放在application作用域的一个变量中,这样,freemarker模板页面就可以直接使用

<servlet>

<servlet-name>contextPathInit</servlet-name> <servlet-class>demo.ssm.framwork.ContextPathInitServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

public class ContextPathInitServlet extends HttpServlet {

private static final long serialVersionUID = 9154047903006043149L;

private static final String CONTEXT_PATH_PARAM = "ctx";

 

@Override

public void init(ServletConfig config) throws ServletException {

config.getServletContext().setAttribute(CONTEXT_PATH_PARAM,

config.getServletContext().getContextPath());

}

}

Freemarker模板导出excel

使用excel模板 在模板里面使用freemaker标签,

然后使用freemarker的api生成最终的excel文件,替代poi的编码,方便维护和修改

Freemaker模板中的变量值为null,就会报错

 

Freemarker用于springboot

pom.xml引入依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>   

application.properties配置freemarker

    spring.freemarker.request-context-attribute=request
    spring.freemarker.suffix=.html
    
static文件夹下存放静态文件*.js,*.css,图片等
    /src/main/resources
        |---static
            |-----css
            |-----images
            |-----js
            
templates文件夹下存放freemarker视图页面
    /src/main/templates
        |---templates
            |--demo
                |-----list.html
                |-----to_add.html
                |-----add.html
                |-----to_edit.html
                |-----edit.html


编写控制器
@Controller
@RequestMapping("/demo")
public class FreemarkerController {

    @RequestMapping("/list")
    public String list(Model model){
        List<Map<String,Object>> list = new ArrayList<>();
        Map<String, Object> map = null;
        map = new HashMap<>();
        map.put("id", 1);
        map.put("name", "张三");
        list.add(map);
        map = new HashMap<>();
        map.put("id", 2);
        map.put("name", "李四");
        list.add(map);
        model.addAttribute("list", list);
        return "demo/list";
    }
}

编写视图页面

引入静态文件js/css/图片等,路径前缀 ${request.contextPath}
request和application.properties中的spring.freemarker.request-context-attribute=request对应

<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script type="text/javascript" src="${request.contextPath}/js/jquery-1.9.1.min.js"></script>
    <script type="text/javascript" src="${request.contextPath}/js/jquery.formatDate.js"></script>
    <link rel="stylesheet" type="text/css" href="${request.contextPath}/css/table.css">
    </head>
    <body>
    <table class="gridtable">
        <tr>
            <td>id</td>
            <td>姓名</td>
        </tr>
        <#list list as ele>
        <tr>
            <td>${ele.id}</td>
            <td>${ele.name}</td>
        </tr>
        </#list>
    </table>
    </body>
</html>



  • 转载请注明出处:https://oldnoop.tech/c/134.html

Copyright © 2018 oldnoop.tech. All Rights Reserved

鄂ICP备2023022735号-1