一、從Freemarker循環list里的Map開始
Map是List中最常見的元素類型之一。在Freemarker中,使用Map的方法和使用單獨的對象差不多。下面我們來看一個例子:
<#list mapList as map> <tr> <td>${map.name}</td> <td>${map.age}</td> <td>${map.email}</td> </tr> </#list>
這段代碼會循環輸出一個Map List類型的表格,表格中的每一行都代表一個Map對象。${map.name}、${map.age}和${map.email}代表了這個Map對象中的三個屬性。這個方式也可以用來循環輸出一個List的元素。
除了這個簡單的例子外,我們還可以使用JavaBean作為元素類型,例如:
class User { private String name; private int age; private String email; // getter & setter 略 }
<#list userList as user> <tr> <td>${user.name}</td> <td>${user.age}</td> <td>${user.email}</td> </tr> </#list>
這樣就能循環輸出一個User List的表格了。
二、Freemarker循環內容
在Freemarker中,使用#list指令可以幫助我們很容易地循環輸出元素。除此之外,我們還可以通過#compress指令來去除循環輸出的空白和換行。下面是一個例子:
<#list users as user><#compress>${user.name}</#compress></#list>
這段代碼會輸出一個連續的字元串,其中包含了users列表中所有用戶的名字,而且沒有任何多餘的空格和換行。
我們也可以使用#sep指令來指定循環輸出元素之間的分隔符。例如,下面的代碼會輸出所有用戶的名字,用逗號隔開:
<#list users as user><#compress>${user.name}</#compress><#sep>, </#sep></#list>
三、Freemarker循環嵌套
循環嵌套是Freemarker中最常見的操作之一。
下面是一個例子,我們將循環輸出一個Map對象列表,這個Map裡面包含了一些其他列表對象:
<#list userGroupList as userGroup> <h2>${userGroup.name}</h2> <#list userGroup.users as user> <tr> <td>${user.name}</td> <td>${user.age}</td> <td>${user.email}</td> </tr> </#list> </#list>
這段代碼可以循環輸出一個包含多個列表的Map對象。
四、Freemarker循環圖表
利用Freemarker循環列表,我們可以在HTML中很容易地創建圖表。首先,我們需要準備好一個二維數組,並將其綁定到參數中,代碼如下:
<#assign chartData = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]>
然後我們使用#list來循環輸出這個數組:
<table> <#list chartData as row> <tr> <#list row as cell> <td>${cell}</td> </#list> </tr> </#list> </table>
這段代碼會生成一個簡單的二維表格,可以輕鬆地將其轉化為圖表。
五、Freemarker循環生成多個表格
在生成多個表格時,我們可以使用類似下面的一些代碼:
<#list tableData as table> <h2>${table.title}</h2> <table> <#list table.rows as row> <tr> <#list row.cells as cell> <td>${cell}</td> </#list> </tr> </#list> </table> </#list>
這段代碼循環輸出有多個不同標題的表格。使用#list指令,我們可以很容易地控制每個表格的輸出格式。
六、Freemarker循環填充空表格
有時候我們需要循環填充空表格,例如:
<table> <#list 0..2 as rowIdx> <#list 0..3 as colIdx> <td> </td> </#list> </#list> </table>
這段代碼會輸出一個3行4列的空表格,每個單元格的內容都是空格。
七、Freemarker循環生成文本框
有時候我們還需要使用文本框來直接獲取用戶的輸入。我們可以使用下面的代碼:
<#list employees as employee> <tr> <td>${employee.name}</td> <td><input type="text" name="age_${employee.id}" value="${employee.age}"></td> <td><input type="text" name="email_${employee.id}" value="${employee.email}"></td> </tr> </#list>
這樣,我們就可以循環生成多個帶有文本框的表格了。
八、Freemarker循環if
在循環中使用if條件語句可以很方便地對元素進行過濾或分類。例如,下面這個代碼會輸出所有年齡小於30歲的用戶:
<#list users as user> <#if user.age < 30> <tr> <td>${user.name}</td> <td>${user.age}</td> <td>${user.email}</td> </tr> </#if> </#list>
同樣的方法我們還可以輸出年齡大於30歲的用戶,或者所有偶數年齡的用戶等等。
九、Freemarker循環map
我們前面介紹過循環輸出列表中的Map類型元素,這裡我們來看一下如果輸出一個獨立的Map對象。
<#assign user = {name: "Tom", age: 20, email: "tom@freemarker.com"}> <#list user?keys as key> <tr> <td>${key}</td> <td>${user[key]}</td> </tr> </#list>
這段代碼會輸出user這個Map對象中的所有鍵值對,只需要循環輸出Map的keys即可。
十、Freemarker循環導出word帶圖片
我們可以利用Freemarker在生成Word文檔的時候自動插入圖片,代碼示例如下:
<#list imgList as img> <img src="data:image/jpeg;base64,${img.content}" /> <br> </#list>
注意這裡的imgList是一個List類型的對象,其中每個對象都包含了要插入的圖片。這段代碼會自動將這些圖片循環插入Word文檔中。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/251835.html