StringTemplate:if条件为true时的递增值

时间:2012-06-27 13:53:27

标签: java stringtemplate stringtemplate-4

我想知道StringTemplate是否支持/支持数字的增量 情况是:

输入是一组具有“isKey()getName()”getter的对象。
输出应为(i=0; IF !obj.getKey() THEN ps.setObject(i++,obj.getName)) ENDIF):

ps.setObject(1,"Name");  
ps.setObject(2,"Name");  
ps.setObject(3,"Name");  
...

目前我有下一个ST <objs:{<if(it.key)><else>ps.setObject(<i>, <it.name;>);<"\n"><endif>}>
如果第一个是关键的话输出:

ps.setObject(2,"Name");  
ps.setObject(3,"Name");  
ps.setObject(4,"Name");  
...

现在问题我需要找到一种方法来替换'i',只有当条件为真时才会增加。

面对此类问题的PLS建议!

1 个答案:

答案 0 :(得分:0)

一般情况下,更改状态以响应ST获取状态不是一个好主意,因此编号非关键字段应该在您的模型中进行,之前开始生成。

nonKeyIndex的getter添加到承载name属性的模型类中。浏览所有兄弟姐妹,并根据需要对其进行编号(即从一个开始并跳过编号中的键)。现在您可以使用此ST生成所需的输出:

<objs:{<if(it.key)><else>ps.setObject(<it.nonKeyIndex>, <it.name;>);<"\n"><endif>}>

有时可能无法将nonKeyIndex等方法添加到模型类中。在这种情况下,您应该将类​​包装到专门设计用于使用字符串模板的视图类中,并在那里添加额外的属性:

public class ColumnView {
    private final Column c;
    private int nonKeyIdx;
    public ColumnView(Column c) {this.c = c;}
    public String getName() { return c.getName(); }
    public boolean getKey() { return c.getKey(); }
    public int getNonKeyIndex() { return nonKeyIdx; }
    public void setNonKeyIndex(int i) { nonKeyIdx = i; }
}