RABC项目问题记录

新建项目

新建maven开始项目的时候,会报错,因为没有webxml.
项目右击-properties,projectfac--,先取消 dynamic。。。,apply然后重新点上


image.png

然后下面



点击设置路径
image.png

一、乱码问题

  1. post乱码
  • 1.1. 直接转换(麻烦,每个都要转换)
1. String loginacct = user.getLoginacct();
       // 将乱码字符串按照错误的编码方式转换为原始的字节码序列
       // byte[] bs = loginacct.getBytes("ISO8859-1");

       // 将原始的字节码序列按照正确的编码转换为正确的文字即可。
       // loginacct = new String(bs, "UTF-8");
  • 1.2. 添加过滤器(一劳永逸)
<!-- 解决乱码问题 -->
     <filter>
        <filter-name>encoding</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    
    <filter-mapping>
        <filter-name>encoding</filter-name>
        <servlet-name>springmvc</servlet-name>
    </filter-mapping>
  1. get 乱码
    tomcat服务器 server。xml
<Connector URIEndoding="UTF-8" connectionTime....

二. 利用 layer.jst 提示功能

login.jsp

<!-- 使用 layer提示功能 -->
    <script src="layer/layer.js"></script>


if(loginacct == ""){
            //alert("用户名为空");
            <!-- 使用 layer提示功能 -->
            layer.msg("用户登录账号不能为空,请输入", {time:2000, icon:5, shift:6}, function(){
                
            });
            return;
        }
        var userpswd = $("#userpswd").val();//loginacct 是 上面的id,唯一标识
        // 表单 value 值不会为null,所以非空校验不能简单的 判断 !=null,而是用空字符串 “”
        if(userpswd == ""){
            //alert("密码为空");
            <!-- 使用 layer提示功能 -->
            layer.msg("用户登录密码不能为空,请输入", {time:2000, icon:5, shift:6}, function(){
                
            });
            return;
        }

三. 错误回显(因为ajax线程都没有刷新,所以错误信息还在)

 // 提交表单
        //alert("提交表单");
        //$("#loginForm").submit();
        // 使用AJAX提交数据
        var loadingIndex = null;
        $.ajax({
            type : "POST",
            url  : "doAJAXLogin",
            data : {
                "loginacct" : loginacct,
                "userpswd"  : userpswd
            },
            beforeSend : function(){
                loadingIndex = layer.msg('处理中', {icon: 16});
            },
            success : function(result) {
                // 成功了就关闭loadin效果
                layer.close(loadingIndex);
                // 对象.属性
                if (result.success) {
                    // 登录成功,跳转到主页面
                    window.location.href = "main";
                } else {
                    layer.msg("用户登录账号或密码不正确,请重新输入", {time:2000, icon:5, shift:6}, function(){
                        
                    });
                }
            }
        });
        

DIspatchContrller

   /**
    * 使用 ajax 解决回显和闪烁
    * @param user
    * @param session
    * @return
    */
   @ResponseBody // 对象无法在网路中传递,转换成字符串
   @RequestMapping("/doAJAXLogin")
   public Object doAJAXLogin(User user, HttpSession session) {
       
       AJAXResult result = new AJAXResult();
       
       User dbUser = userService.query4login(user);
       if ( dbUser != null ) {
           result.setSuccess(true);
       } else {
           result.setSuccess(false);
       }
       
       return result;
   }
   /**
    * 主页面
    * @return
    */
   @RequestMapping("/main")
   public String main() {
       return "main";
   }
   

封装 AJAXResult结果,方便调用

package com.lsy.crowdfunding.bean;

public class AJAXResult {

    private boolean success;
    private Object data;

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
    
}

至此,解决了页面美化提示,用户错误信息不刷新(方便看用户名错没错),跳转没有黑屏三个问题

四、理解 JSON、

<script>
    // JSON : JavaScript Object Notation
    function Student() {
        //this.sname = "zhangsan";
        //this.age = 20;
    }
    
    // JS支持给对象动态添加属性
    var s = new Student();
    s.sname = "lisi";
    
    var s1 = new Student();
    
    
    // 声明JSON对象
    var obj = {name:"lisi", age:20};
    var array = [{}, {}];
    //obj.name = "zhangsan";
    
    //alert(array.length);
    // JSON 字符串 : 将后台对象按照JSON格式转换为字符串输出到浏览器中,让JS当成对象来处理
    
    
    
    
</script>

五、js资源等路径问题

绝对路径:不可改变的路径
    本地绝对路径:增加盘符的路径(e:/test/test.html)
    网络绝对路径:增加协议,IP地址,端口号的路径(http://localhost:8080/test/test.html)
相对路径:可以改变的路径,但是以基准路径为参考,查找其他路径
    默认情况下,相对路径的基准路径是以当前资源的访问路径为基准

路径以斜杠开头,表示的特殊的相对路径,在不同的场景中,相对的位置会发生变化。

    url : http://localhost:8080/atcrowdfunding-web/test/test.html

    前台路径:<a href=”/sssss”><img src=””>
        相对服务器的根 : http://localhost:8080/sssss
    后台路径:forward(”/user.jsp”), xml
        相对web应用的根:http://localhost:8080/atcrowdfunding-web/user.jsp

使用监听器来解决路径

直接的方法:获取项目的名称路径,在资源前加上
pageContext.request.contextPath

在项目启动时候,用户使用之前,利用监听器获取到路径APP_PATH,然后放在资源签
第一步:新建监听器类

package com.lsy.atcrowdfunding.web;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class ServerStartupListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent sce) {
        // web 应用初始化时候会被监听到
        System.out.println("// web 应用初始化时候会被监听到");
        // 将web应用名称(路径)保存到application范围中
        ServletContext application = sce.getServletContext();
        String path = application.getContextPath();
        application.setAttribute("APP_PATH", path);
    }

    public void contextDestroyed(ServletContextEvent sce) {
        // TODO Auto-generated method stub

    }
}

第二步:在 web.xml中注册监听器

<!--  使用自定义监听器 -->
    <listener>
        <listener-class>com.lsy.atcrowdfunding.web.ServerStartupListener</listener-class>
    </listener>

第三步:在页面引入 APP_PATH(监听器自己命名的,可以随意修改,建议)

    <link rel="stylesheet" href="${APP_PATH}/bootstrap/css/bootstrap.min.css">
    <link rel="stylesheet" href="${APP_PATH}/css/font-awesome.min.css">
    <link rel="stylesheet" href="${APP_PATH}/css/main.css">
...

六、包装类会导致空指针异常

因为运算时,包装类会转换为int,包装类有null,而int 没有

七、分页问题

  1. UserController
    逻辑:获取当前页、总页、设置每页数量,查询所有
/*
         *  分页查询
         */
        // limit start, size
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("start", (pageno-1)*pagesize);
        map.put("size", pagesize);
        
        List<User> users = userService.pageQueryData(map);
        model.addAttribute("users", users);
        
        // 当前页码(pageno)
        model.addAttribute("pageno",pageno);
        
        // 数据 总数
        int totalDataSize = userService.queryCount(map);
        System.out.println(totalDataSize);
        
        // 总页码(最大页码)
        int totalPageSize = 0;
        if(totalDataSize % pagesize == 0) {
            totalPageSize = totalDataSize / pagesize;
        }else {
            totalPageSize = (totalDataSize / pagesize)+1; 
        }
        
        // 将最大页码数 传输到页面
        model.addAttribute("totalPageSize", totalPageSize);
        
        return "user/index";

2、user/index.jsp

<c:forEach items="${users}" var="user" varStatus="status">
        <tr>
            <td>${status.count}</td>
            <td><input type="checkbox"></td>
            <td>${user.loginacct}</td>
            <td>${user.username}</td>
            <td>${user.email}</td>                                      
        </c:forEach>

解释:

// itens:循环的目标(查询到的所有用户对象)
// var:别名--循环到的每个对象(单个用户对象)
// vatStatus: 循环状态--当前循环索引 
// ${status.index} 输出行号,从0开始。
// ${status.count} 输出行号,从1开始。
// ${status.current} 当前这次迭代的(集合中的)项
// ${status.first} 判断当前项是否为集合中的第一项,返回值为true或false
// ${status.last} 判断当前项是否为集合中的最后一项,返回值为true或false
// begin、end、step分别表示:起始序号,结束序号,跳跃步伐

以上是最基础的分页,同步分页查询,效率低

使用 异步分页
先渲染页面,局部刷新页面
user-index.jsp
异步查询,使用ajax来查询
步骤
1、将分页的对象封装,方便通过json传递给页面(此处无需 model 等传递数据,异步加载不用一次都传递)

package com.lsy.crowdfunding.bean;

import java.util.List;
/**
 * 分页对象:
 *  对象包括分页的各项属性,当前页码,最大页码,数据长度 
 * 使用泛型,不指定分页的类型,取决于传入的类型
 * @author Administrator
 *
 * @param <T>
 */
public class Page<T> {
    
//  private List<User> user;
    
    // 分页的目标
    private List<T> datas;
    
    // 当前页码
    private int pageno;
    
    // 最大页码(总页码)
    private int totalPageSize;
    
    // 数据总数
    private int totalDataSize;

    public List<T> getDatas() {
        return datas;
    }

    public void setDatas(List<T> datas) {
        this.datas = datas;
    }

    public int getPageno() {
        return pageno;
    }

    public void setPageno(int pageno) {
        this.pageno = pageno;
    }

    public int getTotalPageSize() {
        return totalPageSize;
    }

    public void setTotalPageSize(int totalPageSize) {
        this.totalPageSize = totalPageSize;
    }

    public int getTotalDataSize() {
        return totalDataSize;
    }

    public void setTotalDataSize(int totalDataSize) {
        this.totalDataSize = totalDataSize;
    }
    
}

controller

/**
     * 
     * @param queryText 分页的内容
     * @param pageno 当前页码
     * @param pagesize 每页的数量
     * @return
     */
    @ResponseBody
    @RequestMapping("/user-index")
    public Object pageQuery( String queryText, Integer pageno, Integer pagesize ) {
        
// 封装了 ajax 的结果
        AJAXResult result = new AJAXResult();
        
        try {
            
            // 分页查询
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("start", (pageno-1)*pagesize);
            map.put("size", pagesize);
            map.put("queryText", queryText);
            
            List<User> users = userService.pageQueryData( map );
                        
            // 总的数据条数
            int totalDataSize = userService.queryCount( map );
            // 最大页码(总页码)
            int totalno = 0;
            if ( totalDataSize % pagesize == 0 ) {
                totalno = totalDataSize / pagesize;
            } else {
                totalno = totalDataSize / pagesize + 1;
            }
            
            // 分页对象
            Page<User> userPage = new Page<User>();
            userPage.setDatas(users);
            userPage.setTotalPageSize(totalno);
            userPage.setTotalDataSize(totalDataSize);
            userPage.setPageno(pageno);
            
            result.setData(userPage);
            result.setSuccess(true);
        } catch ( Exception e ) {
            e.printStackTrace();
            result.setSuccess(false);
        }
        
        return result;
        
    }

jsp

            // 页码内容加载完成后
            // 刚进入页面查询第一页
            pageQuery(1);
        });
        $("tbody .btn-success").click(function() {
            window.location.href = "assignRole.html";
        });
        $("tbody .btn-primary").click(function() {
            window.location.href = "edit.html";
        });
        
        // 分页查询
        function pageQuery( pageno ) {
            
            var loadingIndex = null;
            
            var jsonData = {"pageno" : pageno, "pagesize" : 10};
            
            // 异步查询
            $.ajax({
                type : "POST",
                url  : "${APP_PATH}/user/pageQuery",
                data : jsonData,
                
                // 发送之前 执行
                beforeSend : function(){
                    loadingIndex = layer.msg('处理中', {icon: 16});
                },
                
                success : function(result) {
                    // 得到结果后去掉loading
                    layer.close(loadingIndex);
                    // 判断结果成功
                    if ( result.success ) {         
                        // 如果成功
                        // 局部刷新页面数据
                        var tableContent = ""; // 表格信息
                        var pageContent = ""; // 分页信息
                        
                        var userPage = result.data; // 得到后台传入的 页面对象
                        var users = userPage.datas; // 得到 page封装类中的 结果集(此处是用户)
                        
                        // 每个用户就是一行表格,循环遍历
                        // $.each()是一个循环方法,对集合 users 循环
                        // 回调方法(循环体的方法) i--当前索引,user--临时对象(变量)
                        $.each(users, function(i, user){
                            tableContent += '<tr>';
                            tableContent += '  <td>'+(i+1)+'</td>';
                            tableContent += '  <td><input type="checkbox" name="userid" value="'+user.id+'"></td>';
                            tableContent += '  <td>'+user.loginacct+'</td>';
                            tableContent += '  <td>'+user.username+'</td>';
                            tableContent += '  <td>'+user.email+'</td>';
                            tableContent += '  <td>';
                            tableContent += '      <button type="button" onclick="goAssignPage('+user.id+')" class="btn btn-success btn-xs"><i class=" glyphicon glyphicon-check"></i></button>';
                            tableContent += '      <button type="button" onclick="goUpdatePage('+user.id+')" class="btn btn-primary btn-xs"><i class=" glyphicon glyphicon-pencil"></i></button>';
                            tableContent += '     <button type="button" onclick="deleteUser('+user.id+', \''+user.loginacct+'\')" class="btn btn-danger btn-xs"><i class=" glyphicon glyphicon-remove"></i></button>';
                            tableContent += '  </td>';
                            tableContent += '</tr>';
                        });
                        
                        if ( pageno > 1 ) {
                            pageContent += '<li><a href="#" onclick="pageQuery('+(pageno-1)+')">上一页</a></li>';
                        }
                        
                        for ( var i = 1; i <= userPage.totalPageSize; i++ ) {
                            if ( i == pageno ) {
                                pageContent += '<li class="active"><a  href="#">'+i+'</a></li>';
                            } else {
                                pageContent += '<li ><a href="#" onclick="pageQuery('+i+')">'+i+'</a></li>';
                            }
                        }
                        
                        if ( pageno < userPage.totalPageSize ) {
                            pageContent += '<li><a href="#" onclick="pageQuery('+(pageno+1)+')">下一页</a></li>';
                        }

                        $("#userData").html(tableContent);// 添加内容
                        $(".pagination").html(pageContent);// 添加内容
                    } else {
                        // 如果失败
                        layer.msg("用户信息分页查询失败", {time:2000, icon:5, shift:6}, function(){           
                        });
                    }
                }
            });
        }
    </script>

模糊查询

思路:
后台获取文本框数据,供模糊查询
步骤:

  1. 文本框 id queryText
  2. 查询按钮 id queryBtn
  3. 判断是否是模糊查询(文本框有数据则模糊查询,无数据则全查)
  4. 判断结束后,继续调用分页功能(分页在之前基础上,添加判断,是否需要模糊,模糊的话)
1/2 两个id
3.          
                      pageQuery(1); 
            // 查询按钮
            $("#queryBtn").click(function(){
                
                // 获取 输入的值 queryText
                var queryText = $("#queryText").val();
                // 判断是否模糊查询(是否为空)
                if(queryText == ""){
                    // 空,不执行模糊
                    likeflg = false;
                }else{
                    // 不为空,执行模糊
                    likeflg = true;
                }
                // 执行查询,是否模糊查询在方法pageQuery 内判断
                pageQuery(1);       
            });
4. 
// 分页查询
        function pageQuery( pageno ) {
            
            var loadingIndex = null;
            
            var jsonData = {"pageno" : pageno, "pagesize" : 10};
            
            // 模糊判断,true 需要模糊查询
            if ( likeflg == true ) {
                // 查询文本,数据传输到后台
                    jsonData.queryText = $("#queryText").val();
                }
            
            // 异步查询
            $.ajax({
                type : "POST",
                url  : "${APP_PATH}/user/pageQuery",
                data : jsonData,
            。。。。。

修改内容时候,可以添加重置功能

就是修改内容后,想看原来的内容

//resetBtn 重置按钮
// userForm 表单
// reset是dom里的,jquery没有,所以转换
$("#resetBtn"). click(function(){
                    // Jquery[0] ==> DOM
                    // $(DOM) ==> Jquery
                    $("#userForm")[0].reset();
                });

批量删除

先解决复选框
再执行删除
复选框的问题

删除多条数据

/**
     * 删除复选框选定的数据
     * 从表单中获取 userid == 选定的所有数据的id值,并封装为一个数组
     * @param userid
     * @return
     */
    @ResponseBody
    @RequestMapping("/deletes")
    public Object deletes( Integer[] userid ) {
        // 因为有多个,所以定义数组 
        AJAXResult result = new AJAXResult();

        try {
            Map<String, Object> map = new HashMap<String, Object>();
            // userids 可以 获取所有要删除的id
            map.put("userids", userid);
            userService.deleteUsers(map);
            result.setSuccess(true);
        } catch ( Exception e ) {
            e.printStackTrace();
            result.setSuccess(false);
        }
        
        return result;
    }

角色维护

基本分页

controller

    @RequestMapping("/role-index")
    public ModelAndView roleIndex3
        (@RequestParam(required=false,defaultValue="1") Integer pageno,
         @RequestParam(required=false,defaultValue="10") Integer pagesize)
    {
        System.out.println("普通分页查询");
        
        // 既可以创建 ModelAndview 时候指定 页面,也可以 setViewName
        ModelAndView mv = new ModelAndView("role/role-index");
        // mv.setViewName("role/role-index");

        // 分页查询  mysql  limit start(开始位置) size(pagesize)
        // 查询所有role
        
        Map<String, Object> map = new HashMap<String,Object>();
        map.put("start", (pageno-1)*pagesize);
        map.put("size", pagesize);
        
        List<Role> roles = roleService.pageQuery(map);// map 放入 各种分页的参数
        int totalDataSize =  roleService.queryCount();//总数量
        int pageCount=0;// 总页数
        if ( totalDataSize % pagesize == 0 ) {
            pageCount = totalDataSize / pagesize;
        } else {
            pageCount = totalDataSize / pagesize + 1;
        }
        mv.addObject("Test", "test1");
//      mv.addAllObjects(map);addAllObjects
        mv.addObject("roles", roles);
        mv.addObject("pageCount", pageCount);
        mv.addObject("pageno",pageno);
        return mv;
    }

jsp

                                <tbody>
                                    <c:forEach items="${roles}" var="role" varStatus="status">
                                        <tr>
                                            <td>${status.count}</td>
                                            <td><input type="checkbox"></td>
                                            <td>${role.name}</td>
                                            <td>
                                                <button type="button" class="btn btn-success btn-xs">
                                                    <i class=" glyphicon glyphicon-check"></i>
                                                </button>
                                                <button type="button" class="btn btn-primary btn-xs">
                                                    <i class=" glyphicon glyphicon-pencil"></i>
                                                </button>
                                                <button type="button" class="btn btn-danger btn-xs">
                                                    <i class=" glyphicon glyphicon-remove"></i>
                                                </button>
                                            </td>
                                    </c:forEach>
                                </tbody>
                                <tfoot>
                                    <tr>
                                        <td colspan="6" align="center">
                                            <ul class="pagination">
                                                <c:if test="${pageno>1 }">
                                                    <li><a
                                                        href="${APP_PATH }/role/role-index?pageno=${pageno-1    }">上一页</a></li>
                                                </c:if>

                                                <c:forEach var="i" begin="1" end="${ pageCount}" step="1">

                                                    <c:choose>
                                                        <c:when test="${i == pageno }">
                                                            <li class="active"><a
                                                                href="${APP_PATH }/role/role-index?pageno=${i}">${i}
                                                                    <span class="sr-only">(current)</span>
                                                            </a></li>
                                                        </c:when>
                                                        <c:otherwise>
                                                            <li><a
                                                                href="${APP_PATH }/role/role-index?pageno=${i}">${i}
                                                                    <span class="sr-only">(current)</span>
                                                            </a></li>
                                                        </c:otherwise>
                                                    </c:choose>
                                                </c:forEach>


                                                <c:if test="${pageno<pageCount }">
                                                    <li><a
                                                        href="${APP_PATH }/role/role-index?pageno=${pageno+1}">下一页</a></li>
                                                </c:if>

                                            </ul>
                                        </td>
                                    </tr>

                                </tfoot>

ajax分页

第一步:不做查询,直接跳转页面
controller

    /**
     * ajax 分页 第一步:直接跳转页面
     */
    @RequestMapping("/role-index")
    public String roleIndex() {
        return "/role/role-index";
    }

第二步:jsp,写ajax

        // 分页查询
        function pageQuery(pageno){
            // 定义变量,供插件使用,样式插件
            var loadingIndex = null;
            // 异步查询
            $.ajax({
                type : "POST",
                // 调用 controller下的 pageQuery方法
                url  : "${APP_PATH}/role/pageQuery",
                data : {
                    "pageno" : pageno,
                    "pagesize" : 9
                },
                // 数据可能多,需要点时间,等待途中用插件改变样式
                beforeSend:function(){
                    loadingIndex = layer.msg("处理中",{icon:6});
                }
                // 等待结束后,得到结果(可能对也可能出错)
                // 因为后台封装了 ajax 的结果集
                success:function(result){
                    // 关闭样式
                    layer.close(loadingIndex);
                    // 判断对错
                    if(result.success){
                        var tableContext = "";
                        var pageContext = "";
                        // 覆盖 数据部分
                        $("#roleData").html(tableContext);
                        // 覆盖 分页显示部分
                        $(".pagination").html(pageContext);
                        
                    }else{
                        layer.msg("查询失败",{time:2000,icon:5,shift:6},function(){
                            
                        });
                    }
                }
            })
        }
第三步:封装 分页 页面属性
package com.lsy.crowdfunding.bean;

import java.util.List;

public class Page<T> {
    
//  private List<User> user;
    
    // 泛型保存数据
    private List<T> datas;
    
    // 当前页码
    private int pageno;
    
    // 最大页码数
    private int totalPageSize;
    
    // 数据数量
    private int totalDataSize;

    public List<T> getDatas() {
        return datas;
    }

    public void setDatas(List<T> datas) {
        this.datas = datas;
    }

    public int getPageno() {
        return pageno;
    }

    public void setPageno(int pageno) {
        this.pageno = pageno;
    }

    public int getTotalPageSize() {
        return totalPageSize;
    }

    public void setTotalPageSize(int totalPageSize) {
        this.totalPageSize = totalPageSize;
    }

    public int getTotalDataSize() {
        return totalDataSize;
    }

    public void setTotalDataSize(int totalDataSize) {
        this.totalDataSize = totalDataSize;
    }
    
}
第四步:封装 ajax 结果集

方便判断

package com.lsy.crowdfunding.bean;

public class AJAXResult {

    private boolean success;
    private Object data;

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
    
}


最后补齐con方法
    /**
     * ajax 分页 第二步:编写分页查询
     * 因为ajax 不需要再跳转页面,直接用 Object
     */
    @ResponseBody//将Controller类方法返回对象转换为json响应给客户端
    @RequestMapping("/pageQuery")
    public Object pageQuery(String queryText,Integer pageno,Integer pagesize) {
        // pageno 和 pagesize 由 ajax 传入后台,作为参数条件查询分页。
        System.out.println("role-pageQuery");
        System.out.println(pageno);
        AJAXResult result = new AJAXResult();
        try {
            // 分页查询
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("start", (pageno-1)*pagesize);
            map.put("size", pagesize);
            map.put("queryText", queryText);        
            
            List<Role> roles = roleService.pageQuery( map );

            // 总的数据条数
            int totalDataSize = roleService.queryCount();

            // 最大页码(总页码)
            int totalno = 0;
            if ( totalDataSize % pagesize == 0 ) {
                totalno = totalDataSize / pagesize;
            } else {
                totalno = totalDataSize / pagesize + 1;
            }

            // 分页对象
            Page<Role> rolePage = new Page<Role>();
            rolePage.setDatas(roles);
            rolePage.setTotalPageSize(totalno);
            rolePage.setTotalDataSize(totalDataSize);
            rolePage.setPageno(pageno);

            // 分页对象通过 ajax 传入页面
            result.setData(rolePage);
            result.setSuccess(true);
        } catch ( Exception e ) {
            e.printStackTrace();
            result.setSuccess(false);
        }
        
        return result;
    }

批量删除

1.选定复选框

复选框 id="allSelbox"
增加点击事件

        // 复选框
        $("#allSelBox").click(function() {
            // 得到 复选框的选定状态
            var flg = this.checked;
alert(flg);// true代表选定
            // 循环便利每个数据前的复选框
            $("#userData :checkbox").each(function() {
                this.checked = flg;
            });
        });

删除方法(jsp)

// 删除多条(复选框)
        function deleteRolers() {
            // roleData表单中,复选框选定的状态  boxes.length 可以获取到选定的个数
                var boxes = $("#roleData :checked");

                if ( boxes.length == 0 ) {
                    layer.msg("请选择需要删除的用户信息", {time:2000, icon:5, shift:6}, function(){
                        
                    });
                } else {
                    layer.confirm("删除选择的用户信息, 是否继续",  {icon: 3, title:'提示'}, function(cindex){
                        alert($("#roleForm").serialize());
                        // 删除选择的用户信息
                        $.ajax({
                            type : "POST",
                            url  : "${APP_PATH}/role/deletes",
                            data : $("#roleForm").serialize(),
                            success : function(result) {
                                if ( result.success ) {
                                    pageQuery(1);
                                } else {
                                    layer.msg("用户信息删除失败", {time:2000, icon:5, shift:6}, function(){
                                    });
                                }
                            }
                        });
                        layer.close(cindex);
                    }, function(cindex){
                        layer.close(cindex);
                    });
                }
            }
2.删除操作

conroller中,获取到选定的id,直接删除即可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,565评论 25 707
  • 不同 长期在家的人 觉出的 是家的束缚 是家里不好玩 路边的草是那么平常 村口的树是那么常见 想出去闯闯 想出去转...
    道一ooo阅读 95评论 0 0
  • 三五熟知人的热闹 一或两人的安静 以及一个人的孤独 我还喜欢 有一双透明的眼睛 看透一切知世故而不世故 有一间干净...
    16a2a510d277阅读 125评论 0 0