2012-06-27 36 views
1

我想知道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");
...
StringTemplate:如果條件爲true,則增加值

目前我有下一個ST<objs:{<if(it.key)><else>ps.setObject(<i>, <it.name;>);<"\n"><endif>}>
並在輸出的情況下,如果1st是關鍵:
ps.setObject(2,"Name");
ps.setObject(3,"Name");
ps.setObject(4,"Name");
...

問題現在我需要找到一種方法來取代'我'的東西,只會在條件爲真時纔會增加。

PLS的建議誰面臨這個問題的王!

回答

0

一般來說,改變狀態以迴應ST的狀態並不是一個好主意,所以在你的模型中編號非之前你應該從代開始。

nonKeyIndex的吸氣添加到承載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; } 
} 
+0

THX你的迴應,這是一種方式是我的一個備份計劃。同時我也在跳槽,ST會對這些案件提供任何支持。如果手動準備好所有輸入以便打印,那麼,恕我直言,StringTemplate不是那麼適合。 – SairuS

+0

@SairuS鑑於ST遵守MVC模式,這是正確的做法。這就是我在使用ST的最後一份工作時的做法。 – dasblinkenlight

+0

@SairuS「如果手動準備好所有輸入以便打印,那麼,恕我直言,StringTemplate就不那麼符合」ST的想法是將輸出依賴從您的代碼移入您的運行時。您可以設計一次模型(即「手動執行所有輸入」),然後編寫多個ST來爲您的項目生成C++,Java和HTML文檔,所有這些都不需要更改一行Java代碼。 – dasblinkenlight

相關問題