在开发中我们常用到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);
}
点击表单提交测试一下,结果正确!
================== struts2 s:select 标签=============
1 静态生成
- < s:select name = "user.sex" list = "#{'0':'男','1':'女'}" label = "性别" headerKey = "" headerValue = "请选择性别" > </ s:select >
注解:这里从页面来静态(也就是在页面中写死啦)构造下拉选项,关键点是list="#{'0':'男','1':'女'}" 通过它实现的select的两个option 。headerKey指定缺省的选项"key",headerValue指定缺省的选项"value"。
2.设置下拉框数据源
- < %
- java.util.HashMap map = new java.util.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 >
value的值设置为了2,所以初始化下拉框时,会自动选择key值为2的选项
3.action传递list过来
- public class Program implements Serializable {
- /** serialVersionUID */
- private static final long serialVersionUID = 1L;
- private int programid;
- private String programName;
- public int getProgramid() {
- return programid;
- }
- public void setProgramid( int programid) {
- this .programid = programid;
- }
- public String getProgramName() {
- return programName;
- }
- public void setProgramName(String programName) {
- this .programName = programName;
- }
- }
action
- xxxAction extends extends ActionSupport {
- private List<Program> programs ; //list集合
- public List<Program> getPrograms() {
- return programs;
- }
- public void setPrograms(List<Program> programs) {
- this .programs = programs;
- }
- }
jsp页面
- < s:select list = "programs " listValue = "programName " listKey = "programid " name = "program" id = "program"
- headerKey = "0l" headerValue = "" >
- </ s:select >
listKey说明下拉框的key值对应 programid字段,listValue说明下拉框的显示部分对应programName字段