struts2学习:struts2标签中的list、listKey、listValue、headerValue和headerKey属性

来源:互联网 发布:php pdo exec 返回值 编辑:程序博客网 时间:2024/06/05 04:55

下面介绍<select>的属性。

 

首先你要用到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的时候直接用#号使用)

 

struts2的select标签中,常用的有以下几个属性:

(1)struts2中的select 标签中,必须设置的属性只有一个,即是list。

(2)select标签的list中必须有值,不然会报错。如果没有值,可以加上headerKey, headerValue,这样就可以通过了。如:

<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的名称。



list属性是必不可少的,其他两个属性是可选的。在select元素里,Listvalue属性是可选的,如果没有给出这个属性,在某个选项被选中时,该选项的行标将作为select元素的值被发送到服务器。在radio元素里,listValue的属性也是可选的,如果不给出value属性,radio按钮被选时的值将是on。

我们可以把一个String、一个数组、一个枚举java.util.Enumeration、一个java.util.Iterator、一个java.util.Map或一个java.util.Collection赋值给list属性。这个值对象既可以放在一个动作对象里,也可以放在当前会话对象或当前的ServletContext对象里。如果你动态赋值给list属性对象没有任何选项,你必须返回一个空的数组collectionMap,而不是返回一个空值。

1、赋值一个String

    可以将一个数组赋值为String表示形式

<s:select list="{'Atlanta','Chicago','Detroit'}"/>

这个select标签将呈现为

Html代码  收藏代码
  1. <select>  
  2.     <option value="Atlanta">Atlanta</option>  
  3.     <option value="Chicago">Chicago</option>  
  4.     <option value="Detroit">Detroit</option>  
  5. <span style="font-size: small;"></select>  
  6. </span>  

请注意,每个选项的值的行标使用的是同一个字符元素。

在绝大多数Struts应用程序里,选项的值和行标应该是同,这需要使用如下所示的语法:

Html代码  收藏代码
  1. #{'value-1':'label-1','value-2':'label-2','value-3':'label-3','value-4':'label-4'value-5':'label-5'}  

将写成Map型的语法,特别注意在开始位置需要加一个井号“#” 。

例如 :

Html代码  收藏代码
  1. <s:select name ='select1' list="#{'1':'A','2':'B','3':'C'}"/>

表现为

Html代码  收藏代码
  1. <select>  
  2.     <option value="1">A</option>  
  3.     <option value="2">B</option>  
  4.     <option value="3">C</option>  
  5. </select>  

  2、赋值一个Map

      如果想让各个选项的值与它的行标不同,你可以使用一个Map作为选项的来源。使用Map作为选项的来源很简单:把选项的值作Map的key、把选项的行标作Map的value即可。

Java代码  收藏代码
  1. Map<Integer,String> cities = new HashMap<Integer,String> ();  
  2. cities.put("1","A");  
  3. cities.put("2,"B");  
  4. cities.put("3","C"");  
  5. cities.put("4","D);  

 如果cities是一个动作属性,可以像下面这样把它赋值给list属性。

Html代码  收藏代码
  1. <s:select list="cities"/>  

 或者,如果cities是一个应用程序属性,你可敬以使用如下所示代码:

Html代码  收藏代码
  1. <s:select list="#application.cities"/>   

3、赋值一个Collection

    还可以使用一个对象数组或一个对象Collection来作为选项的来源。此时,将需要用到list、listKey、listValue属性。具体做法时把那个数组或Collection赋值给list属性,把用来提供给选项值的对象属性赋值给listKey属性,把用来提供选项行标的对象属性赋值给listValue属性。

Java代码  收藏代码
  1. public class City {  
  2.   
  3.     private Integer id;  
  4.       
  5.     private String name;  
  6.   
  7.     public Integer getId() {  
  8.         return id;  
  9.     }  
  10.   
  11.     public City(Integer id, String name) {  
  12.         this.id = id;  
  13.         this.name = name;  
  14.     }  
  15.   
  16.     public void setId(Integer id) {  
  17.         this.id = id;  
  18.     }  
  19.   
  20.     public String getName() {  
  21.         return name;  
  22.     }  
  23.   
  24.     public void setName(String name) {  
  25.         this.name = name;  
  26.     }  
  27. }  

 集合的代码:

Java代码  收藏代码
  1. Collection<City> c = new ArrayList<City>();  
  2. c.add(new City(1,"A"));  
  3. c.add(new City(2,"B"));  
  4. c.add(new City(3,"C"));  
  5. c.add(new City(4,"D"));  

 页面代码:

Html代码  收藏代码
  1. <s:select list="cities" listKey="id" listValue="name"/>  

 4、在页面中自定义Map型数据:

Html代码  收藏代码
  1. <s:iterator value="#{'10':'ff'}">  
  2.     <s:checkbox key="value" value='key'/>  
  3. </s:iterator>  

 在此例中,它是使用key和value两个引用名称来对#{'10':'ff'}作引用的(写法:#{key:value})。


<s:radio list="#{'1':男,'0':女}" listKey="sex" liseValue="sexname" name="user.sex"/>

其中:
listKey的值可能为1或0,在点击提交表单后,其值会赋值给user.sex,
也就是说listKey的值是给服务器的。
  listValue的值为男或女,因为它只是给用户显示的看的。

<s:select list=" " listKey=" " listValue=" " name=" "/>
其中:
listKey的值 比如:<option value="1">aaa</option>,其中1就是listKey的值。
该值也是传给服务器的
listValue的值,aaa 就是listValue的值,该值是显示在页面上给用户看的

获取<s:select>的listValue

 在开发中我们常用到struts2的form表单组件,其中select最常用的写法如下: 

    <s:select label="对象类型" name="emp.deptId" list="listValues" listKey="oid" listValue="name" headerKey="" headerValue="--请选择--" onchange="changeHidenValue(this)"></s:select>

    当提交表单时,只能在后台获得listKey的值,而无法提交listValue的值。

    现有需求同时提交listKey和listValue,解决方法如下:

    1、在select的onchange事件函数中,获得option中的text,即listValue。

    2、这时,写回到表单的一个隐藏域中。

    首先,在<s:select>标签中添加 (onchange="changeHidenValue(this)")。然后在表单中添加隐藏域<input type=hidden id="deptName" name="emp.deptName" value=""/>。最后写事件绑定函数,如下:

     

    function changeHidenValue(elem){

        var optionVal= $(elem).find("option:selected").text(); // 取到选中的listValue(Option)的值

        $("#deptName").val(optionVal);

    }


原创粉丝点击