模板引擎是一種替代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>