一.初識Freemarker
1.1什麼是Freemarker
- Freemarker是一款模版引擎
- Freemarker不是web框架
- Freemarker官網http://http://freemarker.org
1.2 數據模型+模板輸出=html(輸出)
1.3前端設計師和程序員的側重點
- MVC設計(Model,View,Controller)
- 前端設計師側重於View(模版設計)
- 後端設計師全面掌握MVC
二.maven構建Freemarker項目
2.1 Maven構建Spring+Freemarker項目
Eclipse+Maven使用簡介
Maven這個項目管理和構建自動化工具,越來越多的開發人員使用它來管理項目中的jar包
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>
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中常常用的數據模型
- 基本數據類型(比如Integer)
- 封裝的數據類型(比如User對象)
- 集合類型:List,Map
4.2取值指令
常用${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}對null,不存在對象取值${var!},這樣可以防止拋異常
對於NUL或不存在的值取值時,需要${var!’默認值’}
取包裝對象的值,通過“點”語法:${User.name}
取值的時候進行計算,賦值
變量的賦值運算
<#assign a=100> 聲明變量a值爲100.
變量運算
賦值: a =a顯示:a=100;運算:a+100= {a + 100} 後面的表示運算 結果顯示: a + 100 = 200Date類型格式${date?String(‘yyyy-MM-dd’)}
Freemarker支持的是java.sql.Date,可以直接輸出,如果使用java.util.Date會報錯,可以這樣處理:1 使用java.sql.Date轉換 2 在模板中使用?string(‘yyyy-MM-dd’)進行轉換
如何注意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 調用栗子