过滤StringTemplate中的多值属性

时间:2012-11-10 09:16:56

标签: collections filtering stringtemplate

我有一个模板,它在不同的地方使用相同的多值属性。我经常发现自己处于一种情况,我想在将模板应用于各个值之前过滤该属性。

我可以这样做:

<#col:{c|<if(cond)><# c.Attribute2 #><endif>};separator=\",\"#>

但这不是我想要的,因为输出中有分隔符分隔“跳过”条目,如:

2,4 ,,, 6,,4,5 ,,

我可以将其修改为

<#col:{c|<if(c.Attribute1)><# c.Attribute2 #>,<endif>};separator=\"\"#>

这几乎没问题,但是我在最后一个数字之后得到一个额外的分隔符,有时无关紧要(通常当分隔符是空格时),但有时会这样:

2,4,6,4,5,

我有时会这样做:

<#first(col):{c|<if(cond)><# c.Attribute2 #><endif>};separator=\"\"#>
<#rest(col):{c|<if(cond)>,<# c.Attribute2 #><endif>};separator=\"\"#>

但是如果第一个成员不满足条件,这种方法会失败,那么在开头就有一个额外的分隔符:

,2,4,6,4,5

有人可以给我一个更好的解决方案吗?

2 个答案:

答案 0 :(得分:1)

首先,我要指出,我认为您正在尝试在模板中执行逻辑操作。每当你听到“根据某些条件根据数据过滤我的列表”之类的事情时,可能是时候在模型中计算过滤后的列表然后将其推入。这就是说这样的事情可能会在我们首先过滤列表的地方工作:

<col:{c | <if(c.cond)>c<endif>}:{c2 | <c2.c.attribute>}>

c2.c从第一个应用程序

访问c参数

答案 1 :(得分:0)

“ANTLR Guy”的答案在我的案例中没有帮助,我找到了另一种解决方法。见Filter out empty strings in ST4