如何在同一行中生成迭代输出?

时间:2012-02-24 15:44:15

标签: freemarker

我想使用freemarker生成一些java代码,即为方法生成参数。我有一个名为doIt的方法,它需要一些参数名称及其类名,我将给模板一个名为paramList的参数。我定义了一个宏指令,迭代参数列表,但因此每个参数占用一行。我的模板代码如下:

<#macro paramList plist>
   <#if plist??>
       <#list plist as p>
           ${p.javaType?substring(2)} ${p.name} <#if p_has_next>, </#if>
       </#list>
   </#if>
</#macro>
doIt(<@paramList plist=params/>)

运行结果是:

doIt(           int end , 
           String endDate , 
           String evtCode , 
           int evtNo , 
           String giftCode , 
           int start , 
           String startDate 
)

如何使所有参数输出显示在同一行中。我知道我可以在同一行写入list指令逻辑以避免换行,但是如果还有其他逻辑,那么一段时间后读取和理解会花费太长时间。  我想要的格式是:

doIt(int end , String endDate, String evtCode , int evtNo , String giftCode , int start , String startDate)

2 个答案:

答案 0 :(得分:5)

在最里面的<#t>之后加</#if>。 (见http://freemarker.org/docs/ref_directive_t.html#ref.directive.t

答案 1 :(得分:0)

另一种方法就是改变你的代码:

<#macro paramList plist>
   <#if plist??>
        <#list plist as p>${p.javaType?substring(2)} ${p.name} <#if p_has_next>, </#if></#list>
   </#if>
</#macro>
doIt(<@paramList plist=params/>)

即,将列表全部内联。它更难阅读,但它会保留你需要的空白字符(即空格)。