Freemarker中如何遍歷List摘要:在Freemarker應(yīng)用中經(jīng)常會(huì)遍歷List獲取需要的數(shù)據(jù),并對需要的數(shù)據(jù)進(jìn)行排序加工后呈現(xiàn)給用戶。那么在Freemarker中如何遍歷List,并對List中數(shù)據(jù)進(jìn)行適當(dāng)?shù)呐判蚰兀? 通過下文的介紹,相信您一定會(huì)找到答案。
一、 Freemarker中l(wèi)ist指令簡單介紹 要想在Freemarker中遍歷list,必須通過使用list指令,即<#list sequence as item>…</#list> sequence是集合(collection)的表達(dá)式,item是循環(huán)變量的名字,不能是表達(dá)式。 當(dāng)在遍歷sequence時(shí),會(huì)將遍歷變量的值保存到item中。 舉個(gè)例子說明吧: <#list userList as user> … </#list> userList中封裝了很多個(gè)User對象,我們在遍歷userList時(shí)候,會(huì)將遍歷的User對象的值,保存到上述的user變量中。那么在取值時(shí),我們可以通過${user.userName }來獲取User對象的userName屬性值。 List指令還隱含了兩個(gè)循環(huán)變量: item_index:當(dāng)前迭代項(xiàng)在所有迭代項(xiàng)中的位置,是數(shù)字值。 item_has_next:用于判斷當(dāng)前迭代項(xiàng)是否是所有迭代項(xiàng)中的最后一項(xiàng)。 注意:在使用上述兩個(gè)循環(huán)變量時(shí),一定要將item換成你自己定義的循環(huán)變量名,item其實(shí)就是前綴罷了。 例如,如果你使用<# list list as l>..</#list>定義,那么就要使用l_index,l_has_next。
在循環(huán)過程中,如果您想跳出循環(huán),那么可以使用結(jié)合break指令,即<#break>來完成。
二、 Freemarker中對List進(jìn)行排序 通常我們的排序操作都是通過DAO層來實(shí)現(xiàn)的,如果我們想隨時(shí)更改我們的排序,那么就必須修改我們的DAO層代碼,確實(shí)不方便。但Freemarker為我們提供了這樣的排序方法,解決了這個(gè)問題。 1. sort升序排序函數(shù) sort對序列(sequence)進(jìn)行排序,要求序列中的變量必須是:字符串(按首字母排序),數(shù)字,日期值。 <#list list?sort as l>…</#list> 2. sort_by函數(shù) sort_by有一個(gè)參數(shù),該參數(shù)用于指定想要排序的子變量,排序是按照變量對應(yīng)的值進(jìn)行排序,如: <#list userList?sort_by(“age”) as user>…</#list> age是User對象的屬性,排序是按age的值進(jìn)行的。 3. reverse降序排序函數(shù) <#list list? reverse as l>…</#list> reverse使用同sort相同。reverse還可以同sort_by一起使用 如:想讓用戶按年齡降序排序,那么可以這個(gè)樣寫<#list userList?sort_by(“age”)?reverse as user>…</#list>
三、 Freemarker如何遍歷List實(shí)例應(yīng)用 通過上面的介紹,相信您已經(jīng)對Freemarker如何遍歷List有了了解,那么我們就廢話少說,開始做一個(gè)應(yīng)用吧。 user.ftl
- public class User {
- private String userName;
- private String userPassword;
- private Integer age;
-
-
- public String getUserName() {
- return userName;
- }
-
- public void setUserName(String userName) {
- this.userName = userName;
- }
-
- public String getUserPassword() {
- return userPassword;
- }
-
- public void setUserPassword(String userPassword) {
- this.userPassword = userPassword;
- }
-
- public Integer getAge() {
- return age;
- }
-
- public void setAge(Integer age) {
- this.age = age;
- }
-
- }
- <#--Freemarker遍歷list-->
- 簡單遍歷list:
- <#list userList as user>
- 用戶名:${user.userName}
- 密 碼:${user.userPassword}
- 年 齡: ${user.age}
- </#list>
-
-
- <#--Freemarker遍歷list并應(yīng)用list隱含變量item_index-->
- item_index使用:
- <#list userList as user>
- 第${user_index+1}個(gè)用戶 <#--item_index:當(dāng)前迭代項(xiàng)在所有迭代項(xiàng)中的位置,是數(shù)字值-->
- 用戶名:${user.userName}
- 密 碼:${user.userPassword}
- 年 齡: ${user.age}
- </#list>
- <#--Freemarker遍歷list并應(yīng)用list隱含變量item_has_next-->
- item_has_next,size使用:
- <#list userList as user>
- 用戶名:${user.userName}
- 密 碼:${user.userPassword}
- 年 齡: ${user.age}
- <#if !user_has_next> <#--item_has_next:用于判斷當(dāng)前迭代項(xiàng)是否是所有迭代項(xiàng)中的最后一項(xiàng) -->
- 共有${userList?size}用戶,最后一個(gè)用戶是:${user.userName}
- </#if>
- </#list>
- <#--Freemarker遍歷list并按用戶年齡升序排序-->
-
- 按用戶年齡升序排序:
- <#list userList?sort_by("age") as user>
-
- 用戶名:${user.userName}
- 密 碼:${user.userPassword}
- 年 齡: ${user.age}
-
- </#list>
- <#--Freemarker遍歷list并按用戶年齡降序排序-->
-
- 按用戶年齡降序排序:
- <#list userList?sort_by("age")?reverse as user>
-
- 用戶名:${user.userName}
- 密 碼:${user.userPassword}
- 年 齡: ${user.age}
-
- </#list>
- <#--Freemarker遍歷list當(dāng)用戶年齡大于21歲時(shí),停止輸出-->
- list中應(yīng)用break:
- <#list userList?sort_by("age")?reverse as user>
-
- 用戶名:${user.userName}
- 密 碼:${user.userPassword}
- 年 齡: ${user.age}
- <#if (user.age>21) >
- <#break>
- </#if>
- </#list>
FreemarkerUtil
- 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();
- }
-
- }
- }
|