复选框在Web开发中使用的非常多,现在我们通过struts2的复选框标签来实现一些在开发中经常遇到的问题。
先来看看这个标签的属性:
注:listKey相当于HTML中的value属性,这个值在和后台交互时才真正是我们在后台要使用的;listValue只是内容的显示而已。
用户选择了喜欢的课程,现在要对已经选择的课程进行修改,跳转到修改界面,然后回显已经勾选的课程。
用户已选课程界面:
点击按钮后进入课程修改界面:
注:在修改界面要对用户最初的选择进行回显。
用户已选课程界面:
<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代码:
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;}}修改界面:
<body> 您所选择的课程为: <s:checkboxlist name="courses" list="#cous" value="#userCourses" /> </body>
注:在修改界面,很简单就可以实现结果的回显,另外,list和value的值,我们只需要#属性名称的形式就可以获取,是因为我们在action中已经把对象存在了ActionContext即OGNLContext上下文中。
下面我们通过一个相似的案例来更接近的模拟开发环境:
用户选择自己的偶像(一个javaBean对象),然后同样是跳转到修改界面进行修改,在修改界面进行回显数据。
用户已选偶像界面:
修改界面(要实现数据的回显)
用户已选偶像界面:
<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对象:
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代码:
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;}}修改界面(进行数据的回显):
<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复选框实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!