Java框架學(xué)習(xí)Struts2復(fù)選框?qū)嵗a
復(fù)選框在Web開(kāi)發(fā)中使用的非常多,現(xiàn)在我們通過(guò)struts2的復(fù)選框標(biāo)簽來(lái)實(shí)現(xiàn)一些在開(kāi)發(fā)中經(jīng)常遇到的問(wèn)題。
先來(lái)看看這個(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)!!!!
用戶已選課程界面:
<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(" ", ""); /*定義一個(gè)集合把用戶所選擇的課程存在集合中*/ List<String> userCourses = new ArrayList<String>(); /*遍歷*/ for (String str : courStrs.split(",")){ userCourses.add(str); } /*把用戶所選擇的課程存在OGNL Context上下文中*/ ActionContext.getContext().put("userCourses", userCourses); /*以集合的形式把所有復(fù)選框都傳到結(jié)果頁(yè)面進(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; } }
修改界面:
<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上下文中。
下面我們通過(guò)一個(gè)相似的案例來(lái)更接近的模擬開(kāi)發(fā)環(huán)境:
用戶選擇自己的偶像(一個(gè)javaBean對(duì)象),然后同樣是跳轉(zhuǎn)到修改界面進(jìn)行修改,在修改界面進(jìn)行回顯數(shù)據(jù)。
用戶已選偶像界面:
修改界面(要實(shí)現(xiàn)數(shù)據(jù)的回顯)
代碼實(shí)現(xiàn)?。?!
用戶已選偶像界面:
<body> 您的偶像: <form action="checkBoxListAction.action" method="post"> <s:checkboxlist list="#{1:'鄧',2:'習(xí)',3:'胡',4:'李'}" 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ì)象:
public class User { /* 用戶id */ private Integer uid; /* 用戶名 */ private String uname; /* 無(wú)參構(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代碼:
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ù)庫(kù)中獲取所有的偶像,傳到前臺(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, "李")); /*存到OGNL Context上下文中*/ ActionContext.getContext().put("users", users); /*定義一個(gè)集合,用來(lái)存放用戶所選的偶像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ù)的回顯):
<body> 您的偶像為: <s:checkboxlist name="users" list="#users" listKey="uid" listValue="uname" value="#userIds"/> </body>
注:listKey和listValue就是javaBean的兩個(gè)屬性,checkboxlist迭代時(shí)會(huì)將他們放在值棧中,所以不需要#命名空間的形式來(lái)獲取,直接使用屬性名稱就可以獲取,value的值為javaBean中uid的集合,自動(dòng)進(jìn)行匹配,然后選中對(duì)應(yīng)的值。
附:
1.如果你的項(xiàng)目沒(méi)有用到freemaker,卻又出現(xiàn)了如下圖所示的錯(cuò)誤!
那么,恭喜你,是因?yàn)槟愕膕truts2標(biāo)簽沒(méi)有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ì)本站的支持!
- Java struts2 package元素配置及實(shí)例解析
- Java框架Struts2實(shí)現(xiàn)圖片上傳功能
- Java中的Struts2框架攔截器之實(shí)例代碼
- struts2簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- struts2數(shù)據(jù)處理_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- struts2標(biāo)簽總結(jié)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- struts2攔截器_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- Java struts2請(qǐng)求源碼分析案例詳解
相關(guān)文章
基于FeignClient調(diào)用超時(shí)的處理方案
這篇文章主要介紹了基于FeignClient調(diào)用超時(shí)的處理方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Java編程實(shí)現(xiàn)高斯模糊和圖像的空間卷積詳解
這篇文章主要介紹了Java編程實(shí)現(xiàn)高斯模糊和圖像的空間卷積詳解,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11關(guān)于Java中常見(jiàn)的負(fù)載均衡算法
這篇文章主要介紹了關(guān)于Java中常見(jiàn)的負(fù)載均衡算法,負(fù)載平衡是一種電子計(jì)算機(jī)技術(shù),用來(lái)在多個(gè)計(jì)算機(jī)、網(wǎng)絡(luò)連接、CPU、磁盤驅(qū)動(dòng)器或其他資源中分配負(fù)載,以達(dá)到優(yōu)化資源使用、最大化吞吐率、最小化響應(yīng)時(shí)間、同時(shí)避免過(guò)載的目的,需要的朋友可以參考下2023-08-08SpringBoot的啟動(dòng)過(guò)程源碼詳細(xì)分析
這篇文章主要介紹了SpringBoot的啟動(dòng)過(guò)程源碼詳細(xì)分析,SpringBoot啟動(dòng)的時(shí)候,會(huì)構(gòu)造一個(gè)SpringApplication的實(shí)例,構(gòu)造SpringApplication的時(shí)候會(huì)進(jìn)行初始化的工作,需要的朋友可以參考下2023-11-11Java 如何使用Feign發(fā)送HTTP請(qǐng)求
這篇文章主要介紹了Java 如何使用Feign發(fā)送HTTP請(qǐng)求,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下2020-11-11SpringBoot多線程與任務(wù)調(diào)度總結(jié)
多線程與任務(wù)調(diào)度是java開(kāi)發(fā)中必須掌握的技能,本文主要介紹了SpringBoot多線程與任務(wù)調(diào)度總結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12java實(shí)現(xiàn)即時(shí)通信的完整步驟分享
這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)即時(shí)通信的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09