有的時候,咱們在數據庫中,會在一個字段存放多個值,之間用特殊字符分割。
好比,須要某個字段存放了用戶我的使用的編程語言(能夠多選)
1.Java
2.C
3.PHP
若是用戶選擇了1和2,那麼,在數據庫中的"編程語言"一欄裏,可能會寫入"1,2"(此處以逗號分隔).java
當在查詢頁面須要顯示編程語言時,咱們不能直接顯示"1,2",而是須要轉換成"Java、C"。
方案1:咱們能夠在後臺獲得查詢結果後轉義,這個須要在後臺遍歷查詢的結果集,效率不高。
方案2:咱們能夠使用struts2的標籤<s:generator>實現上面的功能數據庫
<s:generator val="languageItem" separator="," converter="%{languageItemConverter}">
<s:iterator status="row_languageItem">
<s:if test="#row_languageItem.index != 0">
、<s:property />
</s:if>
<s:else>
<s:property />
</s:else>
</s:iterator>
</s:generator> apache
val="languageItem":爲後臺保存"1,2"的變量;
separator=",":標明變量的分隔符;
converter="%{languageItemConverter}":指明languageItem的轉換方法,咱們須要在對應的Action中添加方法public org.apache.struts2.util.IteratorGenerator.Converter getLanguageItemConverter(){}。編程
<s:generator>內部須要嵌套使用<s:iterator>來遍歷後臺轉換後產生的結果集,而後使用特定的方式顯示(例子中是經過"、"來分隔顯示轉義後的字符)。編程語言
下面是此方法Action的部分代碼:
*Action.javaide
/**
* 轉義數據庫中存放的用戶我的使用的編程語言
* @return
*/
public Converter getLanguageItemConverter(){
return new Converter() {
public Object convert(String value) throws Exception {
String result = "";
switch (Integer.parseInt(value)) {
case 1:
result = "Java";
break;
case 2:
result = "C";
break;
case 3:
result = "PHP";
break;
}
return result;
}
};
}get
經過以上代碼,頁面上最終將顯示的結果是:
Java、Cgenerator
最後再提一下<s:generator>標籤中的可選屬性count,它是用來指定所生成迭代器中元素的數量。
以上面爲例,若是設置count="1",頁面將只顯示:Java;
若是設置count="3",頁面將顯示:Java、C、Java;
也就是說,若是count的值大於轉換後的結果集個數,他將會從頭循環結果集,直到填滿count設置的數量,
因此,如沒有特殊要求,咱們通常不設置此屬性。it