如何在freemarker中忽略带有嵌入列表的换行/ carrige返回?

时间:2016-06-16 12:15:03

标签: java freemarker line-breaks carriage-return

我有一个我想解决的嵌入式列表问题。第一个列表包含可能包含对象列表的对象。如果父对象填充了列表,我想迭代对象并显示值。由于某种原因,它继续将第二个列表的输出放在一个单独的行上。我从文档中想到它应该忽略LIST或IF指令的换行符。下面是一个示例和我得到的输出。

<#list outsideRecordList as outsideRecord>
   ${(outsideRecord.fieldOne!"")?right_pad(9)}   ${(outsideRecord.fieldTwo)?trim} ${(outsideRecord.fieldThree)?trim} 
   <#if (outsideRecord.embeddedList)?has_content>
       <#list outsideRecord.embeddedList as innerRecord>
            <#if innerRecord.status == 'X'>
                <#lt>${""?right_pad(30)}${(innerRecord.fieldFour!"")}   
            </#if>  
      </#list>
 </#if>

我得到了什么:

fieldOne      fieldTwo fieldThree
                                      fieldFour
                                      fieldFour 
                                      fieldFour
fieldOne fieldTwo fieldThree fieldOne fieldTwo fieldThree

I would like first fieldFour to be on the same line as the other fields and then any other fields to be on next line indented at the same posistion.

What I want: fieldOne fieldTwo fieldThree fieldFour fieldFour fieldFour fieldOne fieldTwo fieldThree fieldOne fieldTwo fieldThree

1 个答案:

答案 0 :(得分:0)

${...} - s之后你有一个换行符,所以在“fieldThree”之后会有一个换行符。这与文档一致。你可以<#rt>换行,但是你必须在内部#list的第一次迭代中减少缩进,你还必须确保如果没有“fieldFour”那么行 - 休息加回来。很难遵循。因此,我认为,更多模板方法是打印嵌入式列表的第一项,就像打印“fieldThree”一样(在#if内部检查嵌入式列表是否至少有1个项目)。因此,就像第一个“fieldFour”与输出中的“filedThree”在同一行中一样,它的${...}也在模板的同一行中。然后,如果嵌入列表的?size大于1,则可以从索引1开始列出“fieldFour”-s,如<#list outsideRecord.embeddedList[1..] as innerRecord>