複選框在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複選框實例代碼的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!