学科分类
目录
SSM框架

绑定集合

在批量删除用户的操作中,前端请求传递的都是同名参数的用户id,只要在后台使用同一种数组类型的参数绑定接收,就可以在方法中通过循环数组参数的方式来完成删除操作。但如果是批量修改用户操作的话,前端请求传递过来的数据可能就会批量包含各种类型的数据,如Integer,String等。这种情况使用数组绑定是无法实现的,那么我们应该怎么做呢?

针对这种情况,我们可以使用集合数据绑定。即在包装类中定义一个包含用户信息类的集合,然后在接收方法中将参数类型定义为该包装类的集合。

下面就以批量修改用户为例,来讲解一下集合数据绑定的使用,具体实现步骤如下。

(1)在src目录下,创建一个com.itheima.vo包,并在包中创建包装类UserVO来封装用户集合属性,编辑后的代码如文件1所示。

文件1 UserVO.java

 1    package com.itheima.vo;
 2    import java.util.List;
 3    import com.itheima.po.User;
 4    /**
 5     * 用户包装类
 6     */
 7    public class UserVO {
 8        private List<User> users;
 9        public List<User> getUsers() {
 10            return users;
 11        }
 12        public void setUsers(List<User> users) {
 13            this.users = users;
 14        }
 15    }

在上述代码中,声明了一个List<User>类型的集合属性users,并编写了该属性对应的getter/setter方法。该集合属性就是用于绑定批量修改用户的数据信息。

(2)在控制器类UserController中,编写接收批量修改用户的方法,以及向用户修改页面跳转的方法,其代码如下所示。

/**
 * 向用户批量修改页面跳转
 */
@RequestMapping("/toUserEdit")
public String toUserEdit() {
    return "user_edit";
}
/**
 * 接收批量修改用户的方法
 */
@RequestMapping("/editUsers")
public String editUsers(UserVO userList) {
    // 将所有用户数据封装到集合中
    List<User> users = userList.getUsers();
    // 循环输出所有用户信息
    for (User user : users) {
        // 如果接收的用户id不为空,则表示对该用户进行了修改
        if(user.getId() !=null){ 
            System.out.println("修改了id为"+user.getId()+ 
                    "的用户名为:"+user.getUsername());
        }
    }
    return "success";
}

在上述代码的两个方法中,通过toUserEdit()方法将跳转到user_edit.jsp页面,通过editUsers()方法将执行用户批量更新操作,其中editUsers()方法的UserVO类型参数用于绑定并获取页面传递过来的用户数据。

注意:

在使用集合数据绑定时,后台方法中不支持直接使用集合形参进行数据绑定,所以需要使用包装POJO作为形参,然后在包装POJO中包装一个集合属性。

(3)在项目的/WEB-INF/jsp目录下,创建页面文件user_edit.jsp,并编写页面信息,如文件2所示。

文件2 user_edit.jsp

 1    <%@ page language="java" contentType="text/html; charset=UTF-8"
 2        pageEncoding="UTF-8"%>
 3    <html>
 4    <head>
 5    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 6    <title>修改用户</title>
 7    </head>
 8    <body>
 9        <form action="${pageContext.request.contextPath }/editUsers"
 10               method="post" id='formid'>
 11            <table width="30%" border=1>
 12                <tr>
 13                    <td>选择</td>
 14                    <td>用户名</td>
 15                </tr>
 16                <tr>
 17                  <td>
 18                    <input name="users[0].id" value="1" type="checkbox" />
 19                  </td>
 20                  <td>
 21                  <input name="users[0].username" value="tome" type="text" />
 22                  </td>
 23                </tr>
 24                <tr>
 25                  <td>
 26                    <input name="users[1].id" value="2" type="checkbox" />
 27                  </td>
 28                  <td>
 29                  <input name="users[1].username" value="jack" type="text" />
 30                  </td>
 31                </tr>
 32            </table>
 33            <input type="submit" value="修改" />
 34        </form>
 35    </body>
 36    </html>

在上述页面代码中,模拟展示了id为1、用户名为tome和id为2、用户名为jack的两个用户。当单击“修改”按钮后,会将表单提交到一个以“/editUsers”结尾的请求中。

(4)发布项目到Tomcat服务器并启动后,在浏览器中访问地址http://localhost:8080/chapter13/toUserEdit,其显示效果如图1所示。

图1 user_edit.jsp页面

将图1中的用户名tome改为tom,jack改为jacks,并勾选两个数据前面的复选框,然后单击“修改”按钮后,浏览器会跳转到success.jsp页面中。此时控制台的打印信息如图2所示。

图2 运行结果

从图2可以看出,已经成功输出了请求中批量修改的用户信息,这就是集合类型的数据绑定。

点击此处
隐藏目录