1. 程式人生 > >(jsp八)專案例項功能實現補充:ajax及選中所有項

(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;

        }

效果圖:

選中所有項