Freemarker中的3種循環(huán)模式
Freemarker 3種循環(huán)模式
1. map循環(huán)
舉例:
<#if vo.urlMap??> ?? ?<#list vo.urlMap?keys as key> ?? ??? ?<li> ?? ??? ??? ?<a href="${vo.urlMap[key]!''}" rel="external nofollow" >${key!''}</a> ?? ??? ?</li> ?? ?</#list> </#if>
- vo.urlMap?keys: 將map中的key循環(huán)(類似keySet迭代器)
- 循環(huán)中通過map[key]來取的key對應(yīng)的value
- 如果需要當(dāng)前循環(huán)下標(biāo), 使用循環(huán)對象_index取即可, 如: key_index
2. list循環(huán)
舉例:
<#list vo.valueList as value> ?? ?<td>${value!''}</td> </#list>
3. 自定義次數(shù)循環(huán)
舉例:
<!-- 動(dòng)態(tài)長度 ?--> <#list 0..(nums?number)!0 as i> ?? ?<td>${vo.valueList[i]!''}</td> </#list> <!-- 固定長度 ?--> <#list 1..100 as i> ?? ?<td>${vo.valueList[i]!''}</td> </#list>
用于配合取出list中的元素(list長度有時(shí)少于預(yù)期, 所以自定義次數(shù))
需要注意的是, 由于循環(huán)次數(shù)和list長度解耦了, 要小心數(shù)組越界,
(可以通過默認(rèn)值的方式避免)
如: ${(vo.valueList[i])!'無'}
將前面整個(gè)用括號(hào)括起來會(huì)自動(dòng)判定每一步是否為null
Freemarker 循環(huán)遍歷數(shù)字
普通的循環(huán)遍歷是這樣:
<#list recordPage.content as record> <!--do someting--> </#list>
要是遍歷數(shù)字呢?可以這樣: max 是傳來的值。
<#list 1..max as i> <li><a href="#" rel="external nofollow" >${i}</a></li> </#list>
但是如果這樣寫 --> <#list 1..${max} as i> Freemaker會(huì)報(bào)語法錯(cuò)誤。
當(dāng)時(shí)我的需求是要寫一個(gè)雙層<#list> 外層list遍歷對象,內(nèi)層list需要對象的一個(gè)數(shù)量屬性值來決定這個(gè)對象再次遍歷幾次。
那上面代碼中的max怎么賦值呢,試驗(yàn)了各種情況,只要<#list 1..${max} as i>遍歷數(shù)字時(shí)出現(xiàn)‘${}’,就會(huì)報(bào)錯(cuò)。所以就試驗(yàn)了下不帶 ${} 會(huì)出現(xiàn)什么樣的情況,于是出現(xiàn)了下面的代碼:
<#list allocationCars as allocationCar> <#list 1..(allocationCar.qty) as i> <td>${allocationCar_index+1} . ${i_index}</td> </#list> </#list>
成功完成需求!
allocationCars 是后臺(tái)傳來的car對象集合,一般我們使用<#list>遍歷后會(huì)用 “ defValue="${(allocationCar.brandId?c)!}" ”這種方式來獲取遍歷后對象的屬性。
但是又由于<#list>遍歷數(shù)字時(shí)候得語法限制,給max賦值的地方無法使用 ‘${}’ 。而經(jīng)過上面的實(shí)驗(yàn)得知,在<#list> 標(biāo)簽中獲取對象的屬性是不需要加‘${}’的,可以直接獲取到,看來應(yīng)該是freemaker的內(nèi)部機(jī)制進(jìn)行了處理。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于spring boot中幾種注入方法的一些個(gè)人看法
這篇文章主要給大家介紹了關(guān)于spring boot中幾種注入方法的一些個(gè)人看法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07關(guān)于break和continue以及l(fā)abel的區(qū)別和作用(詳解)
下面小編就為大家?guī)硪黄P(guān)于break和continue以及l(fā)abel的區(qū)別和作用(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05Java單元測試Powermockito和Mockito使用總結(jié)
公司單元測試框架選用了Junit 4.12,Mock框架選用了Mockito和PowerMock,本文主要介紹了Java單元測試Powermockito和Mockito使用總結(jié),感興趣的可以了解一下2021-09-09