Java框架學習Struts2復選框實例代碼
復選框在Web開發(fā)中使用的非常多,現(xiàn)在我們通過struts2的復選框標簽來實現(xiàn)一些在開發(fā)中經(jīng)常遇到的問題。
先來看看這個標簽的屬性:

注:listKey相當于HTML中的value屬性,這個值在和后臺交互時才真正是我們在后臺要使用的;listValue只是內容的顯示而已。
案例1
用戶選擇了喜歡的課程,現(xiàn)在要對已經(jīng)選擇的課程進行修改,跳轉到修改界面,然后回顯已經(jīng)勾選的課程。
用戶已選課程界面:

點擊按鈕后進入課程修改界面:

注:在修改界面要對用戶最初的選擇進行回顯。
代碼實現(xiàn)!!!!
用戶已選課程界面:
<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>
注:在修改界面,很簡單就可以實現(xiàn)結果的回顯,另外,list和value的值,我們只需要#屬性名稱的形式就可以獲取,是因為我們在action中已經(jīng)把對象存在了ActionContext即OGNLContext上下文中。
下面我們通過一個相似的案例來更接近的模擬開發(fā)環(huán)境:
用戶選擇自己的偶像(一個javaBean對象),然后同樣是跳轉到修改界面進行修改,在修改界面進行回顯數(shù)據(jù)。
用戶已選偶像界面:

修改界面(要實現(xiàn)數(shù)據(jù)的回顯)

代碼實現(xiàn)?。。?/h2>
用戶已選偶像界面:
<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創(chuàng)建的Map集合。listKey相當于表單提交的真實value值,我們把Map的key傳到后臺進行處理。
javaBean對象:
public class User {
/* 用戶id */
private Integer uid;
/* 用戶名 */
private String uname;
/* 無參構造函數(shù) */
public User() {
}
/* 構造函數(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代碼:
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ù)庫中獲取所有的偶像,傳到前臺展示,然后和用戶選擇的進行對比*/
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;
}
}修改界面(進行數(shù)據(jù)的回顯):
<body> 您的偶像為: <s:checkboxlist name="users" list="#users" listKey="uid" listValue="uname" value="#userIds"/> </body>
注:listKey和listValue就是javaBean的兩個屬性,checkboxlist迭代時會將他們放在值棧中,所以不需要#命名空間的形式來獲取,直接使用屬性名稱就可以獲取,value的值為javaBean中uid的集合,自動進行匹配,然后選中對應的值。
附:
1.如果你的項目沒有用到freemaker,卻又出現(xiàn)了如下圖所示的錯誤!

那么,恭喜你,是因為你的struts2標簽沒有name屬性導致?。。?!(淚的教訓啊,被它坑了兩個小時!)
總結
以上就是本文關于Java框架學習Struts2復選框實例代碼的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

