freemarker的使用


一:freemarker是什么?

freemarker是一個模板引擎,基於定義的模板和數據生成對應的文本(HTML,xml,java等),是一個生成文本的工具。

二:freemarker的使用方法

(1)在工程中引入freemarker相關的依賴

<dependency>
  <groupId>org.freemarker</groupId>
  <artifactId>freemarker</artifactId>
  <version>2.3.23</version>
</dependency>
View Code

(2)使用的步驟

第一步:創建一個Configuration對象,直接new一個即可,構造參數是freemarker的版本號

第二步:設置模板文件所在的路徑,需要給出在磁盤上儲存的全路徑

第三步:設置生成的文件的編碼格式,一般為utf-8格式

第四步:加載模板,創建模板對象

第五步:創建模板使用的數據集,可以使pojo也可以是map類型的

第六步:創建Write流對象,將文件文件輸出,需要指定生成的文件的名稱

第七步:調用模板的process方法,生成相應的文本

第八步:關閉流

@Test
    public void genFile() throws Exception {
        // 第一步:創建一個Configuration對象,直接new一個對象。構造方法的參數就是freemarker對於的版本號。
        Configuration configuration = new Configuration(Configuration.getVersion());
        // 第二步:設置模板文件所在的路徑。
        configuration.setDirectoryForTemplateLoading(new File("D:/workspace/item-web/src/main/webapp/WEB-INF/ftl"));
        // 第三步:設置模板文件使用的字符集。一般就是utf-8.
        configuration.setDefaultEncoding("utf-8");
        // 第四步:加載一個模板,創建一個模板對象。
        Template template = configuration.getTemplate("hello.ftl");
        // 第五步:創建一個模板使用的數據集,可以是pojo也可以是map。一般是Map。
        Map dataModel = new HashMap<>();
        //向數據集中添加數據
        dataModel.put("hello", "this is my first freemarker test.");
        // 第六步:創建一個Writer對象,一般創建一FileWriter對象,指定生成的文件名。
        Writer out = new FileWriter(new File("D:/temp/out/hello.html"));
        // 第七步:調用模板對象的process方法輸出文件。
        template.process(dataModel, out);
        // 第八步:關閉流。
        out.close();
    }

(3)模板的語法

1.訪問map中的key

${key}即可獲得對應的value值

2.訪問pojo中的屬性

以student對象為例: ${student.id}  ${student.name}即可取得student對象中的id值和name值

3.去集合中的元素

例如:遍歷學生對象集合,取出每一個學生的id值和name值

<#list studentList as student>

  ${student,id} ${student.name} 

<#list>

4.取集合中的下標

<#list studentList as student>

  對象+下划線+index 即可獲得下標值

  ${student_index}

<#list>

5.判斷

<#list sutdnetList as student>

  進行奇偶數的判斷

  <#if student_index % 2 ==0>

    //偶數的處理過程

  <#else>

    //奇數的處理過程

  <#if>

<#list>

6.日期類型的格式化

${date?date}  當前日期

${date?time}  當前時間

${date?datetime} 當前日期和時間

${date?string("yyyy-MM-dd hh:mm:ss")} 設置日期格式

7.NULL的處理

!對輸出的控制處理,只輸出,無返回值

${name} 如果name為空就會報錯

${name!}如果name為空,不會報錯,沒有輸出

${name!"默認值'} 如果name為空,就會輸出默認值

${name!666}如果name為空,會輸出666

${student.name}如果student或者name為空,報錯

${student.name!"默認值"}如果student為空,會報錯,name為空,輸出默認值

??測試是否為null,返回Boolean類型的值

product.color??將只測試color是否為null


(product.color)??將測試product和color是否存在null 


 ??和?的區別

??是判斷對象是否為空,例如:<#if object??>object對象不為空(即object存在)</#if>

?后面要加內建函數名,例如:<#if object?exists>object對象不為空(即object存在)</#if>

<#if str??>${str?string}</#if><#--將str以字符串形式顯示-->

8.include標簽

<#include “模板名稱“>

三:freemarker和spring的整合

(1)將Configuration對象的創建交給spring統一管理,為該對象注入兩個屬性,模板路徑和文件的編碼格式

<bean id="freemarkerConfig"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="/WEB-INF/ftl/" />
        <property name="defaultEncoding" value="UTF-8" />
    </bean>
View Code

(2)進行測試

@Controller
public class HtmlGenController {
    
    @Autowired
    private FreeMarkerConfigurer freeMarkerConfigurer;

    @RequestMapping("/genhtml")
    @ResponseBody
    public String genHtml()throws Exception {
        // 1、從spring容器中獲得FreeMarkerConfigurer對象。
        // 2、從FreeMarkerConfigurer對象中獲得Configuration對象。
        Configuration configuration = freeMarkerConfigurer.getConfiguration();
        // 3、使用Configuration對象獲得Template對象。
        Template template = configuration.getTemplate("hello.ftl");
        // 4、創建數據集
        Map dataModel = new HashMap<>();
        dataModel.put("hello", "1000");
        // 5、創建輸出文件的Writer對象。
        Writer out = new FileWriter(new File("D:/temp/term197/out/spring-freemarker.html"));
        // 6、調用模板對象的process方法,生成文件。
        template.process(dataModel, out);
        // 7、關閉流。
        out.close();
        return "OK";
    }
}
View Code

錯誤的地方希望大家指正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM