Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Freemarker模板:“;按“排序”;一个或另一个_Java_Templates_Freemarker - Fatal编程技术网

Java Freemarker模板:“;按“排序”;一个或另一个

Java Freemarker模板:“;按“排序”;一个或另一个,java,templates,freemarker,Java,Templates,Freemarker,我有一个Freemarker模板,涉及两次 “本地时间”和“服务器时间”。如果我可以从数据中确定用户的LocalTime,我需要使用“LocalTime”&按它排序,否则我需要按ServerTime排序。整个数据存在于列表中(来自记录) 最初使用ServerTime是可以的,其功能如下: <#list x.data.record?sort_by("ServerTime") as s> 但是如果我想检查是否有“本地时间”,怎么做 我在等你的消息 <#list x.data.

我有一个Freemarker模板,涉及两次 “本地时间”和“服务器时间”。如果我可以从数据中确定用户的LocalTime,我需要使用“LocalTime”&按它排序,否则我需要按ServerTime排序。整个数据存在于列表中(来自记录)

最初使用ServerTime是可以的,其功能如下:

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

但是如果我想检查是否有“本地时间”,怎么做

我在等你的消息

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


(请注意,这不同于对两列进行排序)

?排序依据
无法执行此操作。这需要自定义比较器功能,但ATM不支持排序方式(myComparatorFunction)


如果您不能将已经排序的列表添加到数据模型中,或者您只想触摸表示层,您仍然可以用Java编写一个
TemplateMethodModelEx
,返回排序的列表,并使用
将其拉入模板中
?sort\u by
无法执行此操作。这需要自定义比较器功能,但ATM不支持排序方式(myComparatorFunction)


如果你不能将已经排序的列表添加到数据模型中,或者你只想触摸表示层,你仍然可以用Java编写一个
TemplateMethodModelEx
,返回排序后的列表,并使用
将其拉入模板中,我仍然是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>

${line.displayDate}
${line.Description}
${line.CheckNum}
${line.InvoiceAmount}
${line.Credit}
${line.Remaining}
${line.Balance}

我仍然是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>

${line.displayDate}
${line.Description}
${line.CheckNum}
${line.InvoiceAmount}
${line.Credit}
${line.Remaining}
${line.Balance}