1. 程式人生 > >(jsp五)簡單功能的實現:刪除、修改及註冊完善

(jsp五)簡單功能的實現:刪除、修改及註冊完善

a.

update.jsp程式碼

<head>

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

<title>學員資訊修改</title>

<script type="text/javascript">

    //定義check_age()函式

    function check_age(){

        //

判斷文字框中輸入的是否為數字

        //如果為數字,則return true

        //否則return false

        //通過文字框id獲取文字框中輸入的值

        var sageTxt=document.getElementById("sage");

        var

sage=sageTxt.value;

        //通過正則表示式來進行匹配驗證

        //需要加定界符,否則就為只要包含數字就可以通過驗證

        var reg=/^\d+$/;

        var b=reg.test(sage);

        if

(b){

            //根據id查詢sage_msg標籤

            var span=document.getElementById("sage_msg");

            span.innerHTML="年齡合法,可以提交";

        }else{

            var span=document.getElementById("sage_msg");

            span.innerHTML="年齡不合法,禁止提交";

        }

        return b;

    }

    //定義check函式

    function check(){

        return check_age();

    }

</script>

</head>

<body>

    <form action="StudentServlet?flag=update" method="post" onsubmit="return check();">

            <!--獲取sid,因為不可修改故設定為隱藏域-->

             <input type="hidden" name="sid" value="${stu.sid}" readonly="readonly" /><br/>

        姓名:<input type="text" name="sname" value="${stu.sname}" /><br/>

        密碼:<input type="password" name="spwd" value="${stu.spwd}" /><br/>

        年齡:<input type="text" name="sage" id="sage" value="${stu.sage}" onblur="check_age()" /><span style="color:red" id="sage_msg"></span><br/>

        性別:

            <c:if test="${stu.ssex==''}">

                <input type="radio" name="ssex" value="" checked="checked" />

                <input type="radio" name="ssex" value="" /><br/>

            </c:if>

            <c:if test="${stu.ssex==''}">

                <input type="radio" name="ssex" value="" />

                <input type="radio" name="ssex" value="" checked="checked" /><br/>

            </c:if>

        <input type="submit" value="確定">

    </form>

</body>

regist新增程式碼

<head>

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

<title>學員註冊</title>

<script type="text/javascript">

function check_age(){

    var sageTxt=document.getElementById("sage");

    var sage=sageTxt.value;

    var reg=/^\d+$/;

    var b=reg.test(sage);

    if(b){

        var span=document.getElementById("sage_msg");

        span.innerHTML="年齡合法,可以提交";

    }else{

        var span=document.getElementById("sage_msg");

        span.innerHTML="年齡不合法,禁止提交";

    }

    return b;

}

function check(){

    return check_age();

}

</script>

</head>

<body>

    <form action="StudentServlet?flag=regist" method="post" onsubmit="return check();">

        姓名:<input type="text" name="sname"><br/>

        密碼:<input type="password" name="spwd" /><br/>

        年齡:<input type="text" name="sage" id="sage" onblur="check_age()" /><span style="color:red" id="sage_msg"></span><br/>

        <!--單選按鈕傳送值為value屬性的值,若不加value值,則傳送至服務端資料為on,且同一組單選按鈕name值必須相等-->

        性別:<input type="radio" name="ssex" value="" />

              <input type="radio" name="ssex" value="" /><br/>

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

        <input type="reset" value="清空" />

    </form>

</body>

刪除部分

<body>

    <table border="1px" width="60%">

        <tr>

            <th>ID</th>

            <th>姓名</th>

            <th>密碼</th>

            <th>年齡</th>

            <th>性別</th>

            <th>操作</th>

        </tr>

        <c:forEach items="${list}" var="s" varStatus="vs">

            <tr>

                <th>${vs.count}</th>

                <th>${s.sname}</th>

                <th>${s.spwd}</th>

                <th>${s.sage}</th>

                <th>${s.ssex}</th>

                <th>

                   <!--

                   a標籤為超連結,連線到StudentServlet,刪除需要傳操作引數及

                   要刪除記錄的sid,引數與引數之間用&隔開,引數賦值用EL表示式,

                   整個程式碼如下所示

                   -->

                   <a href="StudentServlet?flag=delete&sid=${s.sid}">刪除</a>

                   |

                   <a href="StudentServlet?flag=preUpdate&sid=${s.sid}">修改</a>

                </th>

            </tr>

        </c:forEach>

    </table>

    <!--為該頁面新增新增學員功能-->

    <a href="regist.jsp">新增學員</a>

</body>

 

注一:如果要修改某條記錄,則應該先有一個修改頁面,然後再該頁面將該記錄的各項顯示出來,然後再進行修改,再單擊確定,修改成功,所以,在修改前應該先有一個查詢的操作,將該條記錄從資料庫中取出,然後對各項進行顯示,顯示完後再對該頁面的內容進行讀取,讀取至Servlet,通過dao呼叫修改方法,修改成功後再返回至顯示頁面,即給flag賦值為null,所以修改應該分為兩步,第一步preUpdate預修改,實現查詢及顯示記錄,第二步update修改,實現將資料的資料庫修改。其他屬性顯示可以使用EL表示式,性別的預設應該使用jstl中的cif標籤,可以實現性別的預設選中。sid是不可以修改的,所以設定為readonly,表示該表單只讀,或者也可以將該表單設定為隱藏域hidden,即使用者不可見

 

注二:在註冊和修改的時候,如果輸入的年齡不為數字,則後臺會報錯,所以在提交之前應該對其說輸入的年齡進行檢查並進行提示,如果不是數字,則禁止提交,可以通過在form表單中新增一個onsubmit事件,引數為一個Boolean值,所以可以通過在引數中呼叫一個返回值為Boolean型別的check()函式來實現是否可以提交,當年齡表單失去焦點即游標移出即onblur時觸發該檢查事件。如何定義函式?函式定義方法是在head標籤中新增script標籤來對其進行定義定義,具體如程式碼所示

 

b.StudentServlet新增程式碼

//刪除

    //此處可以使用重定向,但是如果將顯示邏輯放到最下面,那麼相比較重定向

    //再一次向Servlet發請求來說,給flag賦值操作顯得更簡便一些,這就要求

    //顯示邏輯必須放在所有操作邏輯的下面

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

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

        dao.deleteBySid(sid);

        flag=null;

    }

//預修改

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

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

        Student stu=dao.findStudentBySid(sid);

        //資料需要拿到jsp端進行顯示,所以需要繫結轉發

        request.setAttribute("stu",stu);

        request.getRequestDispatcher("update.jsp").forward(request, response);

    }

       

    //修改

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

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

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

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

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

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

        Student stu=new Student(sid,sname,spwd,sage,ssex);

        dao.updateStudent(stu);

        flag=null;

    }

 

c.IStudentDAO

新增public Student findStudentBySid(int sid)方法及public void updateStudent(Student stu)方法

 

d.StudentDAOImpl新增程式碼

@Override

    public Student findStudentBySid(int sid) {

        Student stu=null;

        try{

            conn=DBUtil.getConnection();

            ps=conn.prepareStatement("SELECT sid,sname,spwd,sage,ssex FROM student WHERE sid=?");

            ps.setInt(1,sid);

            rs=ps.executeQuery();

            if(rs.next()){

                stu=new Student(sid,rs.getString("sname"),rs.getString("spwd"),rs.getInt("sage"),rs.getString("ssex"));

            }

        }catch(Exception e){

            e.printStackTrace();

        }finally{

            DBUtil.closeConnection(rs, ps, conn);

        }

        return stu;

    }

 

    @Override

    public void updateStudent(Student stu) {

        try{

            conn=DBUtil.getConnection();

            ps=conn.prepareStatement("UPDATE student SET sname=?,spwd=?,sage=?,ssex=? WHERE sid=?");

            ps.setString(1,stu.getSname());

            ps.setString(2,stu.getSpwd());

            ps.setInt(3,stu.getSage());

            ps.setString(4,stu.getSsex());

            ps.setInt(5,stu.getSid());

            ps.executeUpdate();

        }catch(Exception e){

            e.printStackTrace();

        }finally{

            DBUtil.closeConnection(ps, conn);

        }

    }