人生只若如初見之FreeMarker

   

  之前在接觸PHP的時候,嘗試體驗過smarty模板的魅力,得知PHP模板有茫茫多,惋惜經歷有限,沒有逐個嘗試。在後來接觸J2EE以後,發現java也有模板,只不過官方更名叫JSTL,功能也算夠用,慢慢了解到因爲解析效率和書寫慣性的緣由,有一套應用的比較普遍的入門級別模板叫FreeMarker,今天抓緊補補。html

      相比較PHP的開源,貴族氣質般的java從IDE到好多插件都是收費的,因而乎就有了各類以free爲前綴的東西:Jfreechart,收費的MyEclipse,IDEA等等。提到IDEA,就來氣:一樣一個公司出的PHPStrom開始都是不收費的。不發牢騷,好了下面正式開始。java

     百度之: FreeMarker是一款模板引擎: 即一種基於模板和要改變的數據, 並用來生成輸出文本(HTML網頁、電子郵件配置文件源代碼等)的通用工具。 它不是面向最終用戶的,而是一個Java類庫,是一款程序員能夠嵌入他們所開發產品的組件。程序員

    先上手案例:web

<html><br> 
<head><br> 
<title>Welcome!</title><br> 
</head><br> 
<body><br> 
<#-- 註釋部分 --><br> 
<#-- 下面使用插值 --> 
<h1>Welcome ${user} !</h1><br> 
<p>We have these animals:<br> 
<u1><br> 
<#-- 使用FTL指令 --> 
<#list animals as being><br> 
   <li>${being.name} for ${being.price} Euros<br> 
<#list><br> 
<u1><br> 
</body><br> 
</html>

從這裏邊能看到freemarker的基本組成部分:spring

  1. 註釋 <#----->
  2. 數據輸出 ${model.data} 、
  3. FTL指令 <#directivename parameter> 

註釋就不用說了,下面來看一個數據輸出:mvc

  1.    通用輸出: ${expr}
  • 結果爲字符串值:直接輸出表達式結果 
  • 結果爲數字值:根據默認格式(由#setting指令設置)將表達式結果轉換成文本輸出.能夠使用內建的字符串函數

   2  .數字格式化插值:#{expr}或#{expr;format}app

           mX:小數部分最小X位 
           MX:小數部分最大X位 
           以下面的例子: 
        <#assign x=2.582/>  #{x; M2} <#-- 輸出2.58 --> 
          <#assign y=4/>     #{y; M2} <#-- 輸出4 --> 
     下面來看看經常使用的指令maven

  1.         if指令
<#if condition>... 
<#elseif condition>... 
<#elseif condition>... 
<#else> ... 
</#if>
  1.  switch , case , default , break指令
<#switch value> 
<#case refValue>...<#break> 
<#case refValue>...<#break> 
<#default>... 
</#switch>
  1. list, break指令

list指令是一個迭代輸出指令,用於迭代輸出數據模型中的集合,list指令的語法格式以下: 
<#list sequence as item> 
... 
</#list> 
上面的語法格式中,sequence就是一個集合對象,也能夠是一個表達式,但該表達式將返回一個集合對象,而item是一個任意的名字,就是被迭代輸出的集合元素.此外,迭代集合對象時,還包含兩個特殊的循環變量: 
item_index:當前變量的索引值 
item_has_next:是否存在下一個對象 
也能夠使用<#break>指令跳出迭代 
ide

<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x> 
${x_index + 1}.${x}<#if x_has_next>,</if> 
<#if x="星期四"><#break></#if> 
</#list>

其餘比較詳細的講解能夠參考http://blog.csdn.net/fhx007/article/details/7902040/函數

下面簡單說一下在項目中如何引入

 1.maven中使用的話,pom.xml中添加依賴

2.spring的配置文件 applicationContext.xml 中添加bean

<!-- Freemarker配置 -->  
<bean id="freemarkerConfig"  
      class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
    <property name="templateLoaderPath" value="/WEB-INF/view/" />  
    <property name="freemarkerSettings">  
        <props>  
            <prop key="template_update_delay">0</prop>  
            <prop key="default_encoding">UTF-8</prop>  
            <prop key="number_format">0.##########</prop>  
            <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>  
            <prop key="classic_compatible">true</prop>  
            <prop key="template_exception_handler">ignore</prop>  
        </props>  
    </property>  
</bean>

3.springMVC配置文件 springmvc-servlet.xml 中配置

<!--視圖解釋器 -->  
<bean id="viewResolver"  
      class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">  
    <property name="suffix">  
        <value>.ftl</value>  
    </property>  
    <property name="contentType" value="text/html;charset=UTF-8"></property>  
</bean>

4.控制器controller中裝填數據

public class HelloWordController implements Controller {  
  
    @Override  
    public ModelAndView handleRequest(HttpServletRequest hsr  
            , HttpServletResponse hsr1) throws Exception {  
        ModelAndView mv = new ModelAndView("hello");  
        mv.addObject("title", "Spring MVC And Freemarker");  
        mv.addObject("content", " Hello world , test my first spring mvc ! ");  
        return mv;  
    }  
}

5.對用view中獲取數據

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"   
 "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <title>${title}</title>  
    </head>  
    <body>  
        ${content}  
    </body>  
</html>
相關文章
相關標籤/搜索