(jsp八)项目实例功能实现补充:ajax及选中所有项

说明:在添加时还需要注意一点,在添加时需要将文本框设置为必填项并对商品名称进行验证,如果已经存在的话则在光标离开文本框及onblur事件发生时进行提示名称存在并阻止提交。此处就需要用ajax技术——异步的javascript and xml,有点是页面局部刷新,用户体验度好,在后台对名称进行验证时,用户仍然可以继续对其他文本框进行操作。使用该技术时,需要在头部对外部文件进行引入,在表单中onblur事件返回一个check_pname函数,在外部文件中定义check_pname函数,再通过外部文件转到ProductServlet进行验证,验证完毕后再将验证结果通过输出流返回至外部文件,最后由外部文件将结果传至jsp完成整个验证。外部文件为在js文件夹中创建的.js文件。

a.add_product.jsp代码

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<script type="text/javascript" src="js/jquery.js"></script>

<script type="text/javascript" src="js/product.js"></script>

</head>

<body>

    <form action="ProductServlet?flag=Add" method="post" onsubmit="return check_submit()">

        商品名称:<input id="pname" name="pname" type="text" required="required" onblur="check_pname()" /><span style="color:red" id="pname_msg"></span><br/>

        类型名称:

            <select name="tid">

            <c:forEach items="${list}" var="t">

                <option value="${t.tid}">${t.tname}</option>

            </c:forEach>

        </select> 

        <br/>

        商品价格:<input name="pprice" type="text" /><br/>

        商品产地:<input name="paddress" type="text" /><br/>

        商品描述:<input name="pdesc" type="text" /><br/>

        <input type="submit" value="提交">

    </form>

</body>

b.product.js代码

var flag;

function check_pname(){

    //通过id获取panme的文本框的值

    var pname=$("#pname").val();

    //发送ajax请求

    $.ajax({

        //请求路径

        url:'ProductServlet?flag=check_pname',

        //携带的参数

        data:{"pname":pname},

        //提交的方式

        type:"post",

        //**表示服务端返回数据的类型,有:text:文本,xmljson,此处使用json

        dataType:"json",

        //成功时返回的数据,参数为参数名,可任意取

        success:function(data){

            if(data.msg=='ok'){

                //不重复

                $("#pname_msg").html("商品名称可以使用");

                flag=true;

            }else{

                //重复

                $("#pname_msg").html("商品名称已存在");

                flag=false;

            }

        }

    });

}

 

function check_submit(){

    return flag;

}

c.ProductServlet代码:

if("check_pname".equals(flag)){

            String pname=request.getParameter("pname");

            Product product=dao1.findProductByPname(pname);

            if(product==null){

                //js返回不重复的数据

                out.println("{\"msg\":\"ok\"}");

            }else{

                //js返回重复的数据

                out.println("{\"msg\":\"error\"}");

            }

        }

效果图:

说明:通过表单name值获取该表单对象的值,将操作传输至ProductServlet进行操作后再进行返回。删除选中项即选中所有项操作代码如下所示,注意,在删除时如果删除项为其他项外键,则需要先将其他项删除,再删除该项

a.product_list部分代码:

<th><input id="selAll" name="" type="checkbox" value="" onclick="selAll()"/></th>

<td><input name="ids" type="checkbox" value="${map.pid}" /></td>

b.product.js代码:

function delAll(){

    //拿到选中的数据行

    var $arr=$("[name='ids']:checked");

    if($arr.length==0){

        alert("至少选中一项");

    }else{

        var pids="";

        //遍历得到的$arr数组

        //i--正在遍历的下标

        $arr.each(function(i){

            //拿到正在遍历的数据的pid

            pids+=$(this).val()+",";

        });

        //将最后一个逗号切割掉

        pids=pids.substring(0,pids.length-1);

        //返回数据

        location.href='ProductServlet?flag=delAll&pids='+pids;

    }

}

 

function selAll(){

    var flag=$("#selAll").attr("checked");

    //获取所有的数据行

    var $arr=$("[name='ids']");

    //遍历所有的数据行

    $arr.each(function(i){

        $(this).attr("checked",flag);

    });

}

c.ProductServlet部分代码:

if("delete".equals(flag)){

            int pid=Integer.parseInt(request.getParameter("pid"));

            dao1.deleteProductByPid(pid);

            flag=null;

        }

        if("delAll".equals(flag)){

            String pids=request.getParameter("pids");

            String[] ps=pids.split(",");

            if(ps!=null){

                for(String pid:ps){

                   dao1.deleteProductByPid(Integer.parseInt(pid));

                }

            }

            flag=null;

        }

效果图:

选中所有项

猜你喜欢

转载自blog.csdn.net/z774884795/article/details/85013222
今日推荐