(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
//通過正則表示式來進行匹配驗證
//需要加定界符,否則就為只要包含數字就可以通過驗證
var reg=/^\d+$/;
var b=reg.test(sage);
if
//根據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);
}
}