【问题标题】:How to make the iterated output in the same line?如何使迭代输出在同一行?
【发布时间】:2012-03-15 01:41:26
【问题描述】:

我想用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 
)

如何让输出的所有参数出现在同一行。我知道我可以将列表指令逻辑写在同一行以避免换行,但如果还有其他逻辑,一段时间后阅读和理解就会变得太长。 我想要的格式是:

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

【问题讨论】:

    标签: freemarker


    【解决方案1】:

    您可以这样做的另一种方法是像这样更改您的代码:

    <#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/>)
    

    也就是说,使列表全部内联。它更难阅读,但它会保留您需要的空白字符(即空格)。

    【讨论】:

      【解决方案2】:

      在最里面的&lt;/#if&gt; 之后放置一个&lt;#t&gt;。 (见http://freemarker.org/docs/ref_directive_t.html#ref.directive.t

      【讨论】:

      • 太好了,我在 "${p.javaType?substring(2)} ${p.name} , #if>" 之后放了一个 ,然后就可以了给了我我期望的结果。你帮了我一个大忙,谢谢。事实证明,换行是freemarker中white-blank概念的一部分。
      猜你喜欢
      • 2019-03-06
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      相关资源
      最近更新 更多