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

        }

    }

 

猜你喜欢

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