Java模版引擎之Freemarker篇

一.初識Freemarker

1.1什麼是Freemarker

1.2 數據模型+模板輸出=html(輸出)

1.3前端設計師和程序員的側重點

  • MVC設計(Model,View,Controller)
  • 前端設計師側重於View(模版設計)
  • 後端設計師全面掌握MVC

二.maven構建Freemarker項目

2.1 Maven構建Spring+Freemarker項目

  1. Eclipse+Maven使用簡介

    Maven這個項目管理和構建自動化工具,越來越多的開發人員使用它來管理項目中的jar包

  2. Maven依賴Spring和FreeMarker的jar包
    pom.xml文件主要配置項目所需的jar包(這裏包括spring開發所需jar包和freemarkerjar包)
    freemarker依賴如下

    <dependency>
    <groupid>org.freemarker</groupid>
    <artifactid>freemarker</artifactid>
    <version>2.3.20</version></dependency>
    
  3. Spring配置文件和Freemarker Servlet配置文件

   (1) Spring配置文件applicationContext.xml

   在xml配置了這個標籤後,spring可以自動去掃描base-pack下面或者子包下面的Java文件,如果掃描到有@Component @Controller@Service等這些註解的類,則把這些類註冊爲bean

   注意:如果配置了那麼標籤就可以不用再xml中配置了,因爲前者包含了後者。

   (2) Spring Freemarker Servlet配置文件Spring-servlet.xml

       對freemarker的配置(兩種方式1:直接配置2:引入單獨的文件freemark.properties)

<bean id="freemarkerConfig"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="freemarkerVariables">
            <map>
            </map>
        </property>
    <property name="freemarkerSettings">
        <props>
            <prop key="tag_syntax">auto_detect</prop>
            <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>
            <prop key="classic_compatible">true</prop>
        </props>
    </property>
</bean>

視圖配置:

三.springboot集成freemarker

四.freemarker取值(插值)

4.1java中常常用的數據模型

  1. 基本數據類型(比如Integer)
  2. 封裝的數據類型(比如User對象)
  3. 集合類型:List,Map

4.2取值指令

  1. 常用${var}語法進行取值
    @Controller
    @RequestMapping(“/”)
    public class FreemarkerController1 {

    //freemarker取值,插值
    @RequestMapping("/free1")
    public ModelAndView free1(){
        ModelAndView mv1 = new ModelAndView();
        mv1.addObject("intVar",100);
        mv1.addObject("LongVar",10000000000000000L);
        return mv1;
    }}
    

    整數:intVar {LongVar}

  2. 對null,不存在對象取值${var!},這樣可以防止拋異常

    對於NUL或不存在的值取值時,需要${var!’默認值’}

  3. 取包裝對象的值,通過“點”語法:${User.name}

  4. 取值的時候進行計算,賦值

    變量的賦值運算

    <#assign a=100> 聲明變量a值爲100.
    變量運算
    賦值: a = aa=100;a+100= {a + 100} 後面的表示運算 結果顯示: a + 100 = 200

  5. Date類型格式${date?String(‘yyyy-MM-dd’)}

    Freemarker支持的是java.sql.Date,可以直接輸出,如果使用java.util.Date會報錯,可以這樣處理:1 使用java.sql.Date轉換 2 在模板中使用?string(‘yyyy-MM-dd’)進行轉換

  6. 如何注意HTML內容:${var?html}

    ${(userObj.name)!}給userObj.name加括號後再加!(判空符號)表示對整體進行判空,即現對userObj判空,存在後在對name進行判空。添加?html可以輸出原始字符串

4.3邏輯指令:if switch

4.3.1 if

if語法

if多條件判斷

4.4集合List的遍歷

${(userObj.name)!}給userObj.name加括號後再加!(判空符號)表示對整體進行判空,即現對userObj判空,存在後在對name進行判空。添加?html可以輸出原始字符串

4.3.2 switch

每個case都要break,不然會按照順序執行,還要有一個default,可以沒有break,case還支持字符串

4.4集合Map的遍歷

<#list map?keys as key>
${key}(對key取值):${map[key](對value取值)}
<#list>

五.自定義函數簡介

5.1字符串集合操作

5.1.1string基本操作指令

5.2自定義函數

使用自定義函數:

1 代碼中定義:mv.addObject(“sort_int”,new SortMethod());

2 模板中使用:<#assign mylist=[1,2,3,4,5,6] />

5.3自定義指令

自定義指令用@,freemarker內斂指令用#

自定義指令在Freemarker的配置文件中配置,key爲指令名稱,value-ref爲定義的一個bean

自定義指令需要實現TemplateDirectiveModel,重寫execute方法

5.4freemarker常用內建函數

5.4.1處理字符串的內建函數

subtring:字符截取
cap_first:將字符串的第一個首字母變成大寫
ends_with:以什麼結尾
contains:是否包含什麼
date,datetime,time 將字符串轉換爲date,datetime,time日期類型
stars_with:以什麼開始
index_of:某個字符在某個字符串中從頭(0)開始第一次出現的第幾個位置(即索引)
last_index_of:某個字符在某個字符串中從尾(字符串.length-1)開始第一次出現的第幾個位置(即索引)
split:以某個符號爲分隔,將其結果封裝成一個數組
tirm:去掉字符串首位的空格

5.4.2處理數字的內建函數

string  x?string("0.##")  對數字進行格式化
round  四捨五入
floor  把小數點去掉 
ceiling 數字進1,變成整數

5.4.3處理list的內建函數

first  取list第一個值
last  取list最後一個值
seq_contains 這個序列是否包含
seq_index_of  這個序列所在的位置
size list長度
reverse  倒序
sort  升序排序
sort_by  根據屬性排序
trunk 把字符串分塊處理

5.4.4其他內建函數

is函數:判斷變量的類型
is_string  字符串 
is_number   整數
is_method   方法

() 對變量進行判斷
hs_content 判斷對象是否是空值,是不是有內容
eval 求值函數

5.5freemarker內建函數代碼講解

macro,nested,return語法

macro 代碼栗子

nested 個性化設置

函數function 調用栗子

6總結

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章