开发者学堂课程【Java Web开发系列课程 - Struts2框架入门:批量数据处理】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/537/detail/7325
批量数据处理
内容介绍:
批量提交
一、 数组和集合的处理
二、 集合对象的处理
一、 数组和集合的处理
首先我们看一下代码,新建一个 Web Project,
名称为 struts2_branch
然后将常规的东西导过来,之后导入核心配置文件,将配置复制过来。接下来我们要加一个 struts。
假如现在要提交一个数据,在 jsp 里设个页面,比如我们提交多个爱好 hobbies
我们设置一个 form 表达,提交的是用户信息
<
body>
<form action="add.action " method="post">
用户名:
<input type="text" name="name" /><b
r
>
爱好:
<input type="cheskbox" name= "hobbies"value="football"/>足球
<inputtype="checkbox" name= "hobbies" value="basketball" />
篮球
<input type="checkbox" name="hobbies" value="ping
p
ang" />乒乓球
<input type= "cheskbox" name= "hobbies" value="yumao
q
iu"
/>
羽毛球<
br>
<
input type=
“
submit”value=”
提交
”/
>
<
/form>
之后创建 UserAction
Package cn.sxt.action;
Public class UserAction {
private String name;
p
rivate String[] hobbies;
p
ublic String execute(){
System.out.println(“name=”+name);
System.out.println(“hobbies=”+hobbies.length);
Return ”success”;
}
public String getName(){
return name;
}
public void setName(String name){
提交过来后,我们要配置 struts_xml
<struts>
<
package name=”default”extends=”struts-default”namespace=”/”
<
action name=”add” class=”cn.sxt.action.UserAction”>
<result>/incex.jsp</result>
<
/action>
<
/package>
<
/struts>
通过处理,我们可能会发现 struts2处理可能不是很完美,那就需要我们自己去处理。
我们去访问一下,选择乒乓球和羽毛球选项,当出现 This is my page 时,说明数据过去了,hobbies=2会显现。
对于数组,我来给大家演示一下
Public class UserAction {
private String name;
p
rivate String[] hobbies;
p
ublic String execute(){
System.out.println(“name=”+name);
System.out.println(“hobbies=”);
f
o
r(int i=0;i<hobbies.length;i++){
system.out.print(hobbies[i]+
“ ”
)
r
eturn
“success”
;
}
public String getName(){
我们再去访问刚才的页面,勾选三个选项提交,我们可以看到
hobbies=football
basketball
pingpang
。
对于单个数据,我们可以直接提交,以数组的形式去显示它是可以的,假如在这个地方再提交一个数据,不再是爱好是喜欢游戏。
<
body>
<form action="add.action " method="post">
用户名:
<input type="text" name="name" /><b
r
>
爱好:
<input type="cheskbox" name= "hobbies"value="football"/>足球
<inputtype= checkbox" name= "hobbies" value="basketball" />
篮球
<input type="checkbox" name="hobbies" value="ping
p
ang" />乒乓球
<inputtype="cheskbox"name="hobbies" value="yumao
q
iu"/>
羽毛球<
br>
喜欢游戏:
<input type="checkbox" name="games " value="Lol."
/>英雄联盟
<input type="cheskbox" name="games" value="dota" / >dota
<input type="checkbox" name= "games " value= "war3"
/>魔兽争霸
<input type="checkbox." name= "games " value="cs"
/>反恐精英
<
br>
<
input type=
“
submit”value=”
提交”/
>
<
/form>
我们可以用数组去处理,也可以用 struts-list 去处理
Public class UserAction {
private String name;
p
rivate String[] hobbies;
private
List
<String> games;
p
ublic String execute(){
System.out.println(“name=”+name);
System.out.println(“hobbies=”+hobbies.length);
}
System.out.println();
System.out.println(
“g
ames=
”+
games);
return ”success”;
}
我们去验证一下,最后得到数据 hobbies=pingpang yumaoqiu games=[dota,cs]
说明对于单个或批量的数据处理,可以使用数组,也可以用 list 集合处理
Jsp 中代码
<form action="add.action " method="post">
用户名:<input type="text" name="name" /><b
r
>
爱好:
<inputtype="cheskbox"name= "hobbies"value="football"/>足球
<inputtype="checkbox" name= "hobbies" value="basketball" />
篮球
<input type="checkbox" name="hobbies" value="ping
p
ang" />乒乓球
<inputtype="cheskbox"name="hobbies" value="yumao
q
iu"/>
羽毛球<
br>
喜欢游戏:
<input type="checkbox" name="games " value="Lol."/>英雄联盟
<input type="cheskbox" name="games" value="dota" / >dota
<input type="checkbox" name= "games " value= "war3"/>魔兽争霸
<input type="checkbox." name= "games " value="cs"/>反恐精英
<
br>
<input type= "submit" value="提交"/>
<
/form>
Action 处理
public class
Us
erAction {
private String name;
private String[ ] hobbies ;
private List<String> games;
public String execute(){
System.out. println( "name="+name);
System.out.print("hobbies=");
for(int i=o;i<hobbies.length ;i++){
System.out.print(hobbies[i]+”");
}
System.out-println( );
System. out- println( "games="+games);
return "success";
}
public String getName() {
return name;
}
publie void setName( String name) {
this.name = name;
}
public String[ ] getHobbies( ) {
return hobbies;
}
publie void setHobbi
es
(
S
tring[ ] hobbies) {
this.hobbies = hobbies;
}
public List<String> getGames() {
return
games;
}
public List<String> getGames()
r
eturn games;
}
public void setGames(List<String> games) {
this.games = games;
}
}
二、 集合对象的处理
有些时候,我们提交的可能是对象,那么提交对象怎么处理呢,假如我现在写一个user
Package cn.sxt.action;
public class User {
private String name;
p
rivate
int
age
;
p
ublic String
getName
(){
return
name;
}
public
void
setNam
e
(String
name){
this
.name=name;
}
public int getAge(){
return age;
}
现在来看如何处理批量对象问题
/body>
<form action= "batch.action" method="post">
用户名:
<input type= "text" name=" "
/>
年龄:
<input type="
age
" name=" "><br>
用户名:
<input type= "text" name=" " />
年龄:
<input type= "
age
" name= ""><b
r
>
用户名:
<input type= "text" name=" "/>
年龄:
<input type="
age
" name=" "><br>
<input type="submit" value="提交"/>
</form>
<
/body>
然后写个 action,叫 BatchAction
Public class BatchAction {
private List<User> users;
public string execute(){
for(User u:users)
{
System.out. println(u);
}
return "success";
}
public List<User> getUsers( ) {
return users;
}
public void setUsers(List<User> users) {
t
his.users=users;
}
}
前面那个页面就需要更改
/body>
<form action= "batch.action" method="post">
用户名:
<input type= "text" name="
users
.name" />
年龄:
<input type="
age
" name="users.age "><br>
用户名:
<input type= "text" name="
users
.name " />
年龄:
<input type= "
age
" name= " users.age "><b
r
>
用户名:
<input type= "text" name="
users
.name "/>
年龄:
<input type="
age
" name=" users.age "><br>
<input type="submit" value="提交"/>
</form>
<
/body>
验证一下,我们可以得到数据,数据给了 users,但是这不是我们想要的数据
当 name=users 时
/body>
<form action= "batch.action" method="post">
用户名:
<input type= "text" name="
users
" />
年龄
:<input type="
age
" name="users "><br>
用户名:
<input type= "text" name="
users
" />
年龄
:<input type= "
age
" name= " users "><b
r
>
用户名:
<input type= "text" name="
users
"/>
年龄:
<input type="
age
" name=" users "><br>
<input type="submit" value="提交"/>
</form>
<
/body>
验证之后,我们发现这次没有接收到数据, 当我们给属性赋值的时候,它才能显示,说明 struts 不能处理这种问题。
如果提交的是批量的对象,这时 struts 没用了,我们可以以两个数组去提交。但是这种方式不是我们想要的,这个时候可以用自定义拦截器。
之前写过一个程序来解决这种问题,现在我们在 list 中将拦截器引用一下
<packagename="default"extends="list-default" namespace="/">
<action name="
add
" class= "cn.sxt.action.
User
Action">
<result>/incex.jsp</result>
<
/action>
<
action name=
“b
atch
”c
lass="cn.sxt.action. BatchAction">
<interceptor-ref name="ListStask" / >
<result> /index
.
jsp</ result>
</action>
</package>
再次提交,当输入的数据与最终显示的数据一致时,问题就处理完成。
对于集合对象的处理,需要自定义拦截器来实现——struts-list.jar
jsp
<
/body>
<form action= "batch.action" method="post">
用户名:<input type= "text" name="users.name "/>
年龄:<input type="text" name="users.age"><br>
用户名:<input type= "text" name="users.name" />
年龄:<input type= "text" name= "users.age"><b
r
>
用户名:<input type= "text" name="users.name "/>
年龄:<input type="text" name="users.age"><br>
<input type="submit" value="提交"/>
</form>
<
/body>
Struts.xml 配置
<package name="default" extends="list-default" namespace="/">
<action name="batch" class= "cn.sxt.action.BatchAction,">
<interceptor-ref name="ListStask" / >
<result> /index
.
jsp</ result>
</action>
</package>
BatchAction
Public class BatchAction {
private List<User> users;
public string execute(){
for(User u:users)
{
System.out. println(u);
}
return "success";
}
public List<User> getUsers( ) {
return users;
}
public void setUsers(List<User> users) {
t
his.users=users;
}
}