FreeMaker中遍歷List的用法
阿新 • • 發佈:2019-02-03
Freemarker中如何遍歷List摘要:在Freemarker應用中經常會遍歷List獲取需要的資料,並對需要的資料進行排序加工後呈現給使用者。那麼在Freemarker中如何遍歷List,並對List中資料進行適當的排序呢?
通過下文的介紹,相信您一定會找到答案。
一、 Freemarker中list指令簡單介紹
要想在Freemarker中遍歷list,必須通過使用list指令,即<#list sequence as item>…</#list>
sequence是集合(collection)的表示式,item是迴圈變數的名字,不能是表示式。
當在遍歷sequence時,會將遍歷變數的值儲存到item中。
舉個例子說明吧:
<#list userList as user>
…
</#list>
userList中封裝了很多個User物件,我們在遍歷userList時候,會將遍歷的User物件的值,儲存到上述的user變數中。那麼在取值時,我們可以通過${user.userName }來獲取User物件的userName屬性值。
List指令還隱含了兩個迴圈變數:
item_index:當前迭代項在所有迭代項中的位置,是數字值。
item_has_next:用於判斷當前迭代項是否是所有迭代項中的最後一項。
注意:在使用上述兩個迴圈變數時,一定要將item換成你自己定義的迴圈變數名,item其實就是字首罷了。
例如,如果你使用<# list list as l>..</#list>定義,那麼就要使用l_index,l_has_next。
在迴圈過程中,如果您想跳出迴圈,那麼可以使用結合break指令,即<#break>來完成。
二、 Freemarker中對List進行排序
通常我們的排序操作都是通過DAO層來實現的,如果我們想隨時更改我們的排序,那麼就必須修改我們的DAO層程式碼,確實不方便。但Freemarker為我們提供了這樣的排序方法,解決了這個問題。
1. sort升序排序函式
sort對序列(sequence)進行排序,要求序列中的變數必須是:字串(按首字母排序),數字,日期值。
<#list list?sort as l>…</#list>
2. sort_by函式
sort_by有一個引數,該引數用於指定想要排序的子變數,排序是按照變數對應的值進行排序,如:
<#list userList?sort_by(“age”) as user>…</#list>
age是User物件的屬性,排序是按age的值進行的。
3. reverse降序排序函式
<#list list? reverse as l>…</#list>
reverse使用同sort相同。reverse還可以同sort_by一起使用
如:想讓使用者按年齡降序排序,那麼可以這個樣寫<#list userList?sort_by(“age”)?reverse as user>…</#list>
三、 Freemarker如何遍歷List例項應用
通過上面的介紹,相信您已經對Freemarker如何遍歷List有了瞭解,那麼我們就廢話少說,開始做一個應用吧。
user.ftl
Java程式碼
FreemarkerUtil
通過下文的介紹,相信您一定會找到答案。
一、 Freemarker中list指令簡單介紹
要想在Freemarker中遍歷list,必須通過使用list指令,即<#list sequence as item>…</#list>
sequence是集合(collection)的表示式,item是迴圈變數的名字,不能是表示式。
當在遍歷sequence時,會將遍歷變數的值儲存到item中。
舉個例子說明吧:
<#list userList as user>
…
</#list>
userList中封裝了很多個User物件,我們在遍歷userList時候,會將遍歷的User物件的值,儲存到上述的user變數中。那麼在取值時,我們可以通過${user.userName }來獲取User物件的userName屬性值。
List指令還隱含了兩個迴圈變數:
item_index:當前迭代項在所有迭代項中的位置,是數字值。
item_has_next:用於判斷當前迭代項是否是所有迭代項中的最後一項。
注意:在使用上述兩個迴圈變數時,一定要將item換成你自己定義的迴圈變數名,item其實就是字首罷了。
例如,如果你使用<# list list as l>..</#list>定義,那麼就要使用l_index,l_has_next。
在迴圈過程中,如果您想跳出迴圈,那麼可以使用結合break指令,即<#break>來完成。
二、 Freemarker中對List進行排序
通常我們的排序操作都是通過DAO層來實現的,如果我們想隨時更改我們的排序,那麼就必須修改我們的DAO層程式碼,確實不方便。但Freemarker為我們提供了這樣的排序方法,解決了這個問題。
1. sort升序排序函式
sort對序列(sequence)進行排序,要求序列中的變數必須是:字串(按首字母排序),數字,日期值。
<#list list?sort as l>…</#list>
2. sort_by函式
sort_by有一個引數,該引數用於指定想要排序的子變數,排序是按照變數對應的值進行排序,如:
<#list userList?sort_by(“age”) as user>…</#list>
age是User物件的屬性,排序是按age的值進行的。
3. reverse降序排序函式
<#list list? reverse as l>…</#list>
reverse使用同sort相同。reverse還可以同sort_by一起使用
如:想讓使用者按年齡降序排序,那麼可以這個樣寫<#list userList?sort_by(“age”)?reverse as user>…</#list>
三、 Freemarker如何遍歷List例項應用
通過上面的介紹,相信您已經對Freemarker如何遍歷List有了瞭解,那麼我們就廢話少說,開始做一個應用吧。
user.ftl
Java程式碼
1.public class User { 2. private String userName; 3. private String userPassword; 4. private Integer age; 5. 6. 7. public String getUserName() { 8. return userName; 9. } 10. 11. public void setUserName(String userName) { 12. this.userName = userName; 13. } 14. 15. public String getUserPassword() { 16. return userPassword; 17. } 18. 19. public void setUserPassword(String userPassword) { 20. this.userPassword = userPassword; 21. } 22. 23. public Integer getAge() { 24. return age; 25. } 26. 27. public void setAge(Integer age) { 28. this.age = age; 29. } 30. 31.}
1.<#--Freemarker遍歷list--> 2.簡單遍歷list: 3.<#list userList as user> 4. 使用者名稱:${user.userName} 5. 密 碼:${user.userPassword} 6. 年 齡: ${user.age} 7.</#list> 8. 9. 10.<#--Freemarker遍歷list並應用list隱含變數item_index--> 11.item_index使用: 12.<#list userList as user> 13.第${user_index+1}個使用者 <#--item_index:當前迭代項在所有迭代項中的位置,是數字值--> 14. 使用者名稱:${user.userName} 15. 密 碼:${user.userPassword} 16. 年 齡: ${user.age} 17.</#list> 18.<#--Freemarker遍歷list並應用list隱含變數item_has_next--> 19.item_has_next,size使用: 20.<#list userList as user> 21. 使用者名稱:${user.userName} 22. 密 碼:${user.userPassword} 23. 年 齡: ${user.age} 24. <#if !user_has_next> <#--item_has_next:用於判斷當前迭代項是否是所有迭代項中的最後一項 --> 25. 共有${userList?size}使用者,最後一個使用者是:${user.userName} 26. </#if> 27.</#list> 28.<#--Freemarker遍歷list並按使用者年齡升序排序--> 29. 30.按使用者年齡升序排序: 31.<#list userList?sort_by("age") as user> 32. 33. 使用者名稱:${user.userName} 34. 密 碼:${user.userPassword} 35. 年 齡: ${user.age} 36. 37.</#list> 38.<#--Freemarker遍歷list並按使用者年齡降序排序--> 39. 40.按使用者年齡降序排序: 41.<#list userList?sort_by("age")?reverse as user> 42. 43. 使用者名稱:${user.userName} 44. 密 碼:${user.userPassword} 45. 年 齡: ${user.age} 46. 47.</#list> 48.<#--Freemarker遍歷list當用戶年齡大於21歲時,停止輸出--> 49.list中應用break: 50.<#list userList?sort_by("age")?reverse as user> 51. 52. 使用者名稱:${user.userName} 53. 密 碼:${user.userPassword} 54. 年 齡: ${user.age} 55. <#if (user.age>21) > 56. <#break> 57. </#if> 58.</#list>
FreemarkerUtil
1.public class FreeMarkerUtil {
2. public static void analysisTemplate(String templateName,String templateEncoding,Map<?,?> root){
3. try {
4. Configuration config=new Configuration();
5. File file=new File("src/templates");
6. //設定要解析的模板所在的目錄,並載入模板檔案
7. config.setDirectoryForTemplateLoading(file);
8. //設定包裝器,並將物件包裝為資料模型
9. config.setObjectWrapper(new DefaultObjectWrapper());
10.
11. //獲取模板,並設定編碼方式,這個編碼必須要與頁面中的編碼格式一致
12. Template template=config.getTemplate(templateName,templateEncoding);
13. //合併資料模型與模板
14. Writer out = new OutputStreamWriter(System.out);
15. template.process(root, out);
16. out.flush();
17. out.close();
18. } catch (IOException e) {
19. e.printStackTrace();
20. }catch (TemplateException e) {
21. e.printStackTrace();
22. }
23.
24. }
25.}
public class FreeMarkerUtil {
public static void analysisTemplate(String templateName,String templateEncoding,Map<?,?> root){
try {
Configuration config=new Configuration();
File file=new File("src/templates");
//設定要解析的模板所在的目錄,並載入模板檔案
config.setDirectoryForTemplateLoading(file);
//設定包裝器,並將物件包裝為資料模型
config.setObjectWrapper(new DefaultObjectWrapper());
//獲取模板,並設定編碼方式,這個編碼必須要與頁面中的編碼格式一致
Template template=config.getTemplate(templateName,templateEncoding);
//合併資料模型與模板
Writer out = new OutputStreamWriter(System.out);
template.process(root, out);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}catch (TemplateException e) {
e.printStackTrace();
}
}
}