2013-01-15 20 views
0

我有一個Freemarker模板,並且有兩次涉及 「LocalTime」和「ServerTime」。如果我可以從數據中確定用戶的LocalTime,我需要使用「LocalTime」& sort_by它,否則我需要sort_by ServerTime。列表中的全部數據存在(從記錄)Freemarker模板:「Sort_by」其中一個或其他

這本來就是正常的使用ServerTime做,功能是這樣的:

<#list x.data.record?sort_by("ServerTime") as s> 

但如果我要檢查是否有「本地時間」,這個怎麼做?

我期待本着東西..

<#list x.data.record?sort_by("ServerTime||LocalTime") as s> 

(請注意,這是從分揀兩列不同)

回答

3

?sort_by無法做到這一點。這將需要自定義比較器功能,但不支持?sort_by(myComparatorFunction) ATM。

如果您無法添加已經排序到數據模型的列表,或者您只想觸摸表示層,仍然可以使用Java編寫TemplateMethodModelEx,該文件返回排序列表並將其拉入模板與'<#assign sortByTime = com.example.SortByTimeMethod'?new()>,那麼你可以寫<#list sortByTime(x.data.record) as s>

0

我仍然是freemarker的新手,但我相信我剛剛爲自己解決了這個問題。它的醜陋,但它的作品。大多數時候我並沒有處理數千甚至數百行,所以效率並不是這個案例的一個重要問題。 NetSuite是加入Freemarker的系統,它有點痛苦。基本上,我運行一次列表並將一個值或另一個值(服務器/本地時間)存儲到一個變量中(在我的情況下爲invoiceDate)。然後我把這個變量和我需要的其他顯示變量一起放到一個散列中。那個散列是列表中的一行。

要顯示:我運行該列表,該列表按照我的invoiceDate變量進行排序,並且對於每一行(散列),我打印出我需要的來自該鍵/值對的信息。

我知道這是4年前,但我今晚需要一個答案,並找不到一個,直到我這樣想...希望這可以幫助下一個傢伙!

<#assign y=[]> 
    <#list record.lines as tmpLine> 

    <#assign invoiceDate = tmpLine.datecol> 
    <#if (tmpLine.someIdentifyingMarker != "")> 
     <#assign invoiceDate = tmpLine.custbody_p_ending_date> 
    </#if> 

    <#assign dataLine = {"displayDate":invoiceDate, "Description":tmpLine.description, "CheckNum":tmpLine.custbody_checknumprint, "InvoiceAmount":tmpLine.charge,"Credit":tmpLine.payment,"Remaining":tmpLine.amountremaining,"Balance":tmpLine.balance}> 
    <#assign y = y+[dataLine]> 

    </#list> 

<#list y?sort_by('displayDate') as line><tr> 


    <td colspan="4">${line.displayDate}</td> 
    <td colspan="10">${line.Description}</td> 
    <td colspan="4"><span style="background-color: rgb(255, 255, 255);">${line.CheckNum}</span></td> 
    <td align="right" colspan="5">${line.InvoiceAmount}</td> 
    <td align="right" colspan="4">${line.Credit}</td> 
    <td align="right" colspan="4"><span style="text-align: -webkit-right; background-color: rgb(255, 255, 255);">${line.Remaining}</span></td> 
    <td align="right" colspan="5">${line.Balance}</td> 
    </tr> 
    </#list></table>