復(fù)選框在web開發(fā)中使用的非常多,現(xiàn)在我們通過struts2的復(fù)選框標(biāo)簽來實(shí)現(xiàn)一些在開發(fā)中經(jīng)常遇到的問題。
先來看看這個(gè)標(biāo)簽的屬性:
注:listkey相當(dāng)于html中的value屬性,這個(gè)值在和后臺(tái)交互時(shí)才真正是我們?cè)诤笈_(tái)要使用的;listvalue只是內(nèi)容的顯示而已。
案例1
用戶選擇了喜歡的課程,現(xiàn)在要對(duì)已經(jīng)選擇的課程進(jìn)行修改,跳轉(zhuǎn)到修改界面,然后回顯已經(jīng)勾選的課程。
用戶已選課程界面:
點(diǎn)擊按鈕后進(jìn)入課程修改界面:
注:在修改界面要對(duì)用戶最初的選擇進(jìn)行回顯。
代碼實(shí)現(xiàn)!!!!
用戶已選課程界面:
1
2
3
4
5
6
7
|
<body> 您的課程: <form action= "checkboxaction_test.action" method= "post" > <s:checkboxlist list= "{'java','.net','php','c++'}" name= "courses" /></br> <input type= "submit" value= "我要修改" /> </form> </body> |
action代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
public class checkboxaction extends actionsupport { private static final long serialversionuid = 1l; /*用戶所選擇的課程(字符串,要去空格)*/ private string courses; public string getcourses() { return courses; } public void setcourses(string courses) { this.courses = courses; } public string test(){ /*去空格【必須用這種方式去空格,trim()這種方式不管用】*/ string courstrs = this.courses.replaceall(" ", ""); /*定義一個(gè)集合把用戶所選擇的課程存在集合中*/ list<string> usercourses = new arraylist<string>(); /*遍歷*/ for (string str : courstrs.split(",")){ usercourses.add(str); } /*把用戶所選擇的課程存在ognl context上下文中*/ actioncontext.getcontext().put("usercourses", usercourses); /*以集合的形式把所有復(fù)選框都傳到結(jié)果頁面進(jìn)行展示,然后和用戶所勾選的進(jìn)行匹配*/ list<string> cous = new arraylist<string>(); cous.add("java"); cous.add(".net"); cous.add("php"); cous.add("c++"); /*把所有課程存在ognl context上下文中*/ actioncontext.getcontext().put( "cous" , cous); return this .success; } } |
修改界面:
1
2
3
4
|
<body> 您所選擇的課程為: <s:checkboxlist name= "courses" list= "#cous" value= "#usercourses" /> </body> |
注:在修改界面,很簡(jiǎn)單就可以實(shí)現(xiàn)結(jié)果的回顯,另外,list和value的值,我們只需要#屬性名稱的形式就可以獲取,是因?yàn)槲覀冊(cè)赼ction中已經(jīng)把對(duì)象存在了actioncontext即ognlcontext上下文中。
下面我們通過一個(gè)相似的案例來更接近的模擬開發(fā)環(huán)境:
用戶選擇自己的偶像(一個(gè)javabean對(duì)象),然后同樣是跳轉(zhuǎn)到修改界面進(jìn)行修改,在修改界面進(jìn)行回顯數(shù)據(jù)。
用戶已選偶像界面:
修改界面(要實(shí)現(xiàn)數(shù)據(jù)的回顯)
代碼實(shí)現(xiàn)!!!
用戶已選偶像界面:
1
2
3
4
5
6
7
|
<body> 您的偶像: <form action= "checkboxlistaction.action" method= "post" > <s:checkboxlist list= "#{1:'鄧小平',2:'習(xí)近平',3:'胡錦濤',4:'李克強(qiáng)'}" name= "ids" listkey= "key" listvalue= "value" /></br> <input type= "submit" value= "我要修改" /> </form> </body> |
注:list為ognl創(chuàng)建的map集合。listkey相當(dāng)于表單提交的真實(shí)value值,我們把map的key傳到后臺(tái)進(jìn)行處理。
javabean對(duì)象:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
public class user { /* 用戶id */ private integer uid; /* 用戶名 */ private string uname; /* 無參構(gòu)造函數(shù) */ public user() { } /* 構(gòu)造函數(shù) */ public user(integer uid, string uname) { this .uid = uid; this .uname = uname; } public integer getuid() { return uid; } public void setuid(integer uid) { this .uid = uid; } public string getuname() { return uname; } public void setuname(string uname) { this .uname = uname; } } |
action代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
public class checkboxlistaction extends actionsupport { private static final long serialversionuid = 1l; /* 偶像集合 */ private list<user> users; /* 偶像id字符串 */ private string ids; public list<user> getusers() { return users; } public void setusers(list<user> users) { this.users = users; } public string getids() { return ids; } public void setids(string ids) { this.ids = ids; } public string execute() { /*模擬從數(shù)據(jù)庫中獲取所有的偶像,傳到前臺(tái)展示,然后和用戶選擇的進(jìn)行對(duì)比*/ users = new arraylist<user>(); users.add(new user(1, "鄧小平")); users.add(new user(2, "習(xí)近平")); users.add(new user(3, "胡錦濤")); users.add(new user(4, "李克強(qiáng)")); /*存到ognl context上下文中*/ actioncontext.getcontext().put("users", users); /*定義一個(gè)集合,用來存放用戶所選的偶像id的集合*/ list<integer> userids = new arraylist<integer>(); /*獲取用戶所勾選的ids,去除空格【必須用這種方式,trim()方法不管用】*/ ids = ids.replaceall(" ", ""); /*迭代*/ for (string str : ids.split(",")){ userids.add(integer.valueof(str)); } /*把id存到ognl上下文集合中*/ actioncontext.getcontext().put( "userids" , userids); return this .success; } } |
修改界面(進(jìn)行數(shù)據(jù)的回顯):
1
2
3
4
|
<body> 您的偶像為: <s:checkboxlist name= "users" list= "#users" listkey= "uid" listvalue= "uname" value= "#userids" /> </body> |
注:listkey和listvalue就是javabean的兩個(gè)屬性,checkboxlist迭代時(shí)會(huì)將他們放在值棧中,所以不需要#命名空間的形式來獲取,直接使用屬性名稱就可以獲取,value的值為javabean中uid的集合,自動(dòng)進(jìn)行匹配,然后選中對(duì)應(yīng)的值。
附:
1.如果你的項(xiàng)目沒有用到freemaker,卻又出現(xiàn)了如下圖所示的錯(cuò)誤!
那么,恭喜你,是因?yàn)槟愕膕truts2標(biāo)簽沒有name屬性導(dǎo)致!!!!(淚的教訓(xùn)啊,被它坑了兩個(gè)小時(shí)!)
總結(jié)
以上就是本文關(guān)于java框架學(xué)習(xí)struts2復(fù)選框?qū)嵗a的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
原文鏈接:http://blog.csdn.net/lzm1340458776/article/details/29825399