struts2標籤:

有的時候,我們在數據庫中,會在一個字段存放多個值,之間用特殊字符分割。
比如,需要某個字段存放了用戶個人使用的編程語言(可以多選)
1.Java
2.C
3.PHP
如果用戶選擇了1和2,那麼,在數據庫中的"編程語言"一欄裏,可能會寫入"1,2"(此處以逗號分隔).

當在查詢頁面需要顯示編程語言時,我們不能直接顯示"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>	

val="languageItem":爲後臺保存"1,2"的變量;
separator=",":標明變量的分隔符;
converter="%{languageItemConverter}":指明languageItem的轉換方法,我們需要在對應的Action中添加方法public org.apache.struts2.util.IteratorGenerator.Converter getLanguageItemConverter(){}。

<s:generator>內部需要嵌套使用<s:iterator>來遍歷後臺轉換後產生的結果集,然後使用特定的方式顯示(例子中是通過"、"來分隔顯示轉義後的字符)。

下面是此方法Action的部分代碼:
*Action.java

	/**
     * 轉義數據庫中存放的用戶個人使用的編程語言
     * @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;
    		}
    	};
    }

通過以上代碼,頁面上最終將顯示的結果是:
Java、C

最後再提一下<s:generator>標籤中的可選屬性count,它是用來指定所生成迭代器中元素的數量。
以上面爲例,如果設置count="1",頁面將只顯示:Java;
如果設置count="3",頁面將顯示:Java、C、Java;
也就是說,如果count的值大於轉換後的結果集個數,他將會從頭循環結果集,直到填滿count設置的數量,
所以,如沒有特殊要求,我們一般不設置此屬性。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章