模板引擎(Freemarker为例)

Cheryl
模板引擎是一种替代jsp动态显示数据,实现前后端分离的一种技术手段

Freemarker

简单入门
https://www.cnblogs.com/itdra...
Freemarker生成增删改查及相关文件

使用Freemarker自动生成后端代码
http://www.pianshen.com/artic...
https://www.cnblogs.com/tenny...
SpringBoot代码生成器
http://www.pianshen.com/artic...;jsessionid=B9C108862E3817779D1A09D1BF18BB27

quick-start

引入依赖spring-context-support/spring-boot-starter-freemarker
配置spring.freemarker.suffix: .html

ftl变量

在ftl文件中,以形如${User.username}或者${username}表示变量
Freemarker不允许变量为空值null,如果ftl文件中含有空值变量会报错,为了避免这种情况可以使用默认值的方式,形如!""
单一变量
只对一个变量有效

${username!""}

页面内声明
对页面中的所有变量都有效

<#escape x as x!"">
...
</#escape>

在web.xml中的FreemarkerServlet中配置
整个项目都有效

    <init-param>
            <param-name>classicCompatible</param-name><!-- 默认允许空值输出 -->
            <param-value>true</param-value>
    </init-param>

ftl中的日期和数字显示

日期格式类似java的SimpleDateFormatter格式
数字表示中,0.00表示必须保留两位,0.##表示可以保留两位

日期:${date?string["yyyy-MM-dd"]},数字:${number?string["0.##"]}

ftl的集合遍历

其中?counter ?item_parity 表示当前第几个元素,奇偶性
#else表示如果未取到数据,就该标签之后的内容

list集合
<ul>
    <#list mylist as e>
    <li>${e?counter}:${e}:${e?item_parity}</li>
    <#else>
        数据不存在
    </#list>
</ul>
map集合
<ul>
    <#list mymap?keys as e>
    <li>${e?counter}:${e}</li>
    </#list>
</ul>
<ul>
    <#list mymap?values as e>
    <li>${e?counter}:${e}</li>
    </#list>
</ul>
<ul>
    <#list mymap?keys as e>
    <li>${e?counter}:${e}-${mymap[e]}</li>
    </#list>
</ul>

固定循环次数

            <#list 1..10 as i>
                <li><a href="#">${i}</a></li>
            </#list>

动态循环

            <#list 1..(booklist.totalPage)!0 as i>
                <li><a href="#">${i!""}</a></li>
            </#list>

常见的内置函数

<p>集合的长度:${mylist?size}
<p>字符串的长度:${word?length}
<p>集合拼接:${mylist?join(",")}
<p>大小写转换:${word?upper_case} ${word?uncap_first} ${word?cap_first}

Freemarker与Servlet集成

在web.xml中配置

    <!-- Freemarker集成 -->
    <servlet>
        <servlet-name>freemarker</servlet-name>
        <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
        <init-param>
            <param-name>TemplatePath</param-name><!-- 模板引擎地址 -->
            <param-value>/WEB-INF/content/fm</param-value>
        </init-param>
        <init-param>
            <param-name>ContentType</param-name><!-- 设置编码方式 -->
            <param-value>text/html;charset=UTF-8</param-value>
        </init-param>

        <init-param>
            <param-name>template_update_delay</param-name><!-- 更新频率 -->
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>default_encoding</param-name><!-- 默认编码 -->
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>classicCompatible</param-name><!-- 默认允许空值输出 -->
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup><!-- 启动项目时自动加载这个servlet -->
    </servlet>
    <servlet-mapping>
        <servlet-name>freemarker</servlet-name>
        <url-pattern>*.ftl</url-pattern>
    </servlet-mapping>

SpringMVC与Freemarker的整合

当在Springmvc-servlet.xml中配置时,就不用在web.xml中配置
其中,pom.xml必须要有Spring-context-support和freemarker的依整

    <!-- 3.视图解析器,当页面需要跳转时按视图解析器规则跳转 -->
    <bean id="ftlViewResolver"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="prefix" value="/WEB-INF/content/fm/"></property>
        <property name="suffix" value=".ftl" />
        <property name="contentType" value="text/html;charset=UTF-8" />
        <property name="order" value="0" /><!-- 0:优先解析ftl文件 -->
    </bean>
    <bean id="jspViewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp" />
        <property name="order" value="1" />
    </bean>


    <!-- freemarker在Spring中的配置 -->
    <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value=""></property><!-- freemarker默认查找地址,配置后不用继续在prefix中配置 -->
        <property name="defaultEncoding" value="utf-8" />
        <property name="freemarkerSettings">
            <props>
                <prop key="classic_compatible">true</prop><!-- 允许空值 -->
                <prop key="default_encoding">UTF-8</prop><!-- 默认编码 -->
                <prop key="template_update_delay">0</prop>
            </props>
        </property>
    </bean>

thymeleaf

阅读 885

Java技术栈 [链接]

10 声望
0 粉丝
0 条评论
你知道吗?

Java技术栈 [链接]

10 声望
0 粉丝
文章目录
宣传栏