复选框在web开发中使用的非常多,现在我们通过struts2的复选框标签来实现一些在开发中经常遇到的问题。
先来看看这个标签的属性:
注:listkey相当于html中的value属性,这个值在和后台交互时才真正是我们在后台要使用的;listvalue只是内容的显示而已。
案例1
用户选择了喜欢的课程,现在要对已经选择的课程进行修改,跳转到修改界面,然后回显已经勾选的课程。
用户已选课程界面:
点击按钮后进入课程修改界面:
注:在修改界面要对用户最初的选择进行回显。
代码实现!!!!
用户已选课程界面:
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(" ", ""); /*定义一个集合把用户所选择的课程存在集合中*/ list<string> usercourses = new arraylist<string>(); /*遍历*/ for (string str : courstrs.split(",")){ usercourses.add(str); } /*把用户所选择的课程存在ognl context上下文中*/ actioncontext.getcontext().put("usercourses", usercourses); /*以集合的形式把所有复选框都传到结果页面进行展示,然后和用户所勾选的进行匹配*/ 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> |
注:在修改界面,很简单就可以实现结果的回显,另外,list和value的值,我们只需要#属性名称的形式就可以获取,是因为我们在action中已经把对象存在了actioncontext即ognlcontext上下文中。
下面我们通过一个相似的案例来更接近的模拟开发环境:
用户选择自己的偶像(一个javabean对象),然后同样是跳转到修改界面进行修改,在修改界面进行回显数据。
用户已选偶像界面:
修改界面(要实现数据的回显)
代码实现!!!
用户已选偶像界面:
1
2
3
4
5
6
7
|
<body> 您的偶像: <form action= "checkboxlistaction.action" method= "post" > <s:checkboxlist list= "#{1:'邓小平',2:'习近平',3:'胡锦涛',4:'李克强'}" name= "ids" listkey= "key" listvalue= "value" /></br> <input type= "submit" value= "我要修改" /> </form> </body> |
注:list为ognl创建的map集合。listkey相当于表单提交的真实value值,我们把map的key传到后台进行处理。
javabean对象:
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; /* 无参构造函数 */ public user() { } /* 构造函数 */ 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() { /*模拟从数据库中获取所有的偶像,传到前台展示,然后和用户选择的进行对比*/ users = new arraylist<user>(); users.add(new user(1, "邓小平")); users.add(new user(2, "习近平")); users.add(new user(3, "胡锦涛")); users.add(new user(4, "李克强")); /*存到ognl context上下文中*/ actioncontext.getcontext().put("users", users); /*定义一个集合,用来存放用户所选的偶像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; } } |
修改界面(进行数据的回显):
1
2
3
4
|
<body> 您的偶像为: <s:checkboxlist name= "users" list= "#users" listkey= "uid" listvalue= "uname" value= "#userids" /> </body> |
注:listkey和listvalue就是javabean的两个属性,checkboxlist迭代时会将他们放在值栈中,所以不需要#命名空间的形式来获取,直接使用属性名称就可以获取,value的值为javabean中uid的集合,自动进行匹配,然后选中对应的值。
附:
1.如果你的项目没有用到freemaker,却又出现了如下图所示的错误!
那么,恭喜你,是因为你的struts2标签没有name属性导致!!!!(泪的教训啊,被它坑了两个小时!)
总结
以上就是本文关于java框架学习struts2复选框实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
原文链接:http://blog.csdn.net/lzm1340458776/article/details/29825399