1.第一個例子:
<s:select list="{'aa','bb','cc'}" theme="simple" headerKey="00" headerValue="00"></s:select>
2.第二個例子:
<s:select list="#{1:'aa',2:'bb',3:'cc'}" label="abc" listKey="key" listValue="value" headerKey="0" headerValue="aabb">
3.第三個例子:
<%
HashMap map = new LinkedHashMap();
map.put(1,"aaa");map.put(2,"bbb");
map.put(3,"ccc");
request.setAttribute("map",map);
request.setAttribute("aa","2");
%>
<s:select list="#request.map" label="abc" listKey="key" listValue="value" value="#request.aa" headerKey="0" headerValue="aabb"></s:select>
摘抄自 http://www.cnblogs.com/modou/articles/1326683.html
-----------------------------------------------------------------------------------------------------------------------------------------------
struts2的select標簽中,常用的有以下幾個屬性:
(1)struts2中的select 標簽中,必須設置的屬性只有一個,即是list。
(2)select標簽的list中必須有值,不然會報錯。如果沒有值,可以加上headerKey, headerValue,這樣就可以通過了。如:
xml 代碼
<s:select name="geElement.childType" list="childTypeList" listKey="key" listValue="value" headerKey="0" headerValue="--請選擇子類型--"/>
其中,即使list中有值,我們也通常會加上headerKey, headerValue,即列表中顯示的第一個選項。注意,headerKey不可以為空,不可以為-1。
(3)list屬性:通常是在action中定義的,必須是一個可以迭代的源,如為一個List, Map, Set等。如果是一個Map,那么map的key就對應於select標簽中的value,map中的value就對應於select標簽中的option。而如果是一個List或者是一個Set,那么可以通過listKey和listValue指定。
(4)listKey和listValue:listKey即對應於select標簽中的value, listValue即對應於select標簽中的option。
(5)name屬性:即是表單中select的名稱。
使用例子:
比如在做人員信息管理系統中,需要設置人員的民族、籍貫等信息,而這些信息一把不需要用戶手動輸入,而是通過下拉框進行選擇,那么使用struts2的select標簽應該如何實現呢,好,請看下面:
在Action類中,添加一個成員,String nationId;民族Id,設置getter和setter方法,添加一個Map類型的成員變量,Map nationMap;里面存放民族Id和對應的民族名稱,設置getter和setter方法,在execute方法中,添加如下代碼:
nationMap.put("1","漢族");
nationMap.put("2","苗族");
然后,在jsp頁面中使用select標簽,注意要加入標簽庫的引用:<% taglib uri="/struts-tags" prefix="s" %>,當然了一定要加入struts2的jar包才可以哦
使用標簽: <s:select name="nationId" list="nationMap"></s:select>
這樣就可以了,簡單吧!
上面list里面用的是Map類型的變量,其實list里面也可以是List類型的變量,那么如果是List類型的變量,select標簽就需要使用這種形式
<s:select name="nationId" list="nations" key="name" value="id"/>
其中nations是List類型的變量,里面封裝了一個Bean,Bean里面定義了兩個變量,一個是id,一個是name。這樣就可以了。
-----------------------------------------------------------------------------------------------------------------------------------------------
今天通過url傳值,卻發現select不能獲取傳遞過去的值,讓我很郁悶,搞了半天才弄明白怎么回事!趁着這股勁說說select的用法吧!
首先上官方介紹:
地址 : select tag reference
<s:action name="beanList" namespace="/system" id="bean" />
<s:select headerValue="--Please select--" headerKey="" list="#bean.testList"
name="obj.userName" listKey="userName" listValue="userName" value="%{obj.userName.trim()}"/>
上面就是我使用的test實例了!挨個解釋吧!
首先你要用到select,可以只使用 <s:select>標簽,解釋下這個標簽屬性:
headerValue : 默認值value
headerKey : 默認name
list : 源數據 (可以在action方法里從數據庫獲取list)
name : 被選數據存放的位置(這里我方在對象obj的屬性值userName中<需在action中定義該對象>)
listKey : 下拉選項的name
listValue : 下拉選項的value
value : 默認值
但是一個下拉列表往往是可以重復使用的,那么我們將它單獨定義到一個action中,這里我的action的namespace是system,所以如我們上面定義的<s:action>標簽:
name : 源數據名(對應get方法名)
namespace : 我們在struts.xml中定義的name
id : 相當於別名(在后面調用該actiond的時候直接用#號使用)
那就這樣了,我就用到這些!
今天遇到的是什么問題呢? 就是value了. 我在form表單跳轉的時候下拉列表可以很好的保存值,但是通過url跳轉的時候始終無法獲取值!我在頁面可以打印出傳遞的值,可到了下拉列表就不行!
后來試了老半天,才發現是html在eclipse中format的時候回車鍵被換成空格,這讓我的值后面都有了空字符串,而select獲取默認值又是通過key來一一對應的,所以就獲取不到了,在后面加上trim屬性就好了,太殘念了....
還有獲取值的方式也很郁悶,使用%來獲取的,看來的確要補下ognl才行啊.....