struts2.0的list、listKey和listValue屬性
list、listKey和listValue屬性對radio、combobox、select、checklist、doubleselect等標簽來說非常重要。
我們可以用一組radio標簽來提供一組選項。例如,下面這些HTML輸入標簽將呈現為如圖5-5所示的一組單選按鈕。
正如你看到的那樣,這組單選按鈕由一組值(1、2、3)和一組行標(Atlanta、Chicago、Detroit)構成,它們之間的鍵/值對應情況如下所示:
select元素也可以用來提供一組選項。下面的select元素(如圖5-6所示)能夠提供與剛才那組單選按鈕一樣的選項。
注意 在select元素里,value屬性是可選的。如果沒有給出這個屬性,在某個選項被選中時,該選項的行標將作為select元素的值被發送到服務器。從理論上講,radio元素的value屬性也是可選的。可是,如果不給出value屬性,單選按鈕被選中時的值將是“on”而不是相應的radio元素的 label屬性值,這無疑會讓同一個表單里的多個radio元素難以區別。因此,在使用radio元素的時候往往必須給出它們的value屬性。
本節解釋了list、listKey和listValue屬性在radio、select 和其他用來提供一組選項的標簽里的使用方法。在使用這些標簽時,你們需要提供一些鍵/值對作為那些選項的來源。在這3個屬性當中,list屬性是必不可少的,另外兩個屬性是可選的。我們可以把一個String、一個數組、一個java.util.Enumeration、一個 java.util.Iterator、一個java.util.Map或一個Collection賦值給list屬性,這個值對象既可以放在一個動作對象里,也可以放在當前會話對象或當前ServletContext對象里。
注意 如果你動態賦給list屬性的對象沒有任何選項,你必須返回一個空的數組/Collection/Map,而不是返回一個空值(null)。
5.11.1 賦值一個String
你可以將一個數組賦值為String表示形式。例如,下面把一個字符串賦值給select標簽:
這個select標簽將呈現為:
請注意,每個選項的值和行標使用的是同一個字符串元素。
在絕大多數Struts應用程序里,選項的值和行標應該不同,這需要使用如下所示的語法:
例如,下面這個select標簽
將呈現為:
5.11.2 賦值一個Map
如果你想讓各個選項的值與它的行標不同,你可以使用一個Map作為選項的來源。使用Map作為選項的來源很簡單:把選項的值用作Map的鍵、把選項的行標用作Map的鍵值即可。例如,以下代碼將創建一個名為cities的Map,它包含3個城市的名字:
如果cities是一個動作屬性,你可以像下面這樣把它賦值給list屬性:
或者,如果cities是一個應用程序屬性,你可以使用如下所示的代碼:
5.11.3 賦值一個Collection或一個對象數組
你還可以使用一個對象數組或一個對象Collection來作為選項的來源。此時,你將需要用到list、listKey和listValue屬性。具體做法是:把那個數組或Collection賦值給list屬性,把用來提供選項值的對象屬性賦值給listKey屬性,把用來提供選項行標的對象屬性賦值給listValue屬性。
例如,假設某個動作對象的getCities方法將返回一個以City對象為元素的List,而City對象有一個id和一個name屬性,你就可以用如下所示的代碼把這個List賦值給一個select標簽:
posted on 2011-11-09 09:46 計明敏 閱讀(1648) 評論(0) 編輯 收藏 所屬分類: struts