學習javaWeb,首先要學習基礎的jsp,servlet,弄通了機制然后就得心應手了。我們來實現一個簡單的實例來學習。
我們的任務有:1.數據庫及表創建
上節完成了用戶信息的查看,本節來繼續實現信息修改,這節相對復雜些。
七、用戶信息修改
用戶信息修改是實現,當用戶點擊修改按鈕,會跳轉到用戶信息修改頁面中,並且初始顯示着數據庫中的信息,而且能夠提供用戶修改和保存的功能。
其中最難得當屬,將數據庫中的信息初始到修改頁面。
需要實現的任務有:
1.跳轉Servlet
當用戶點擊修改按鈕,超鏈接會將詞條數據提交給servlet處理
1 <td><a href="servlet/ServletToUserUpdate?userId=<%=user.getUserId() %>">修改</a></td>
(注:頁面詳細代碼,請參見:用戶列表顯示頁面代碼)
用超鏈接的方式提交給ServletToUserUpdate.java 中的doGet(),並且傳遞過去userId
調用UserDao中selectOneUserInfo()方法,將查詢結果返回給userupdate.jsp。ServletToUserUpdate.java的doGet()方法如下:
1 public void doGet(HttpServletRequest request, HttpServletResponse response) 2 throws ServletException, IOException { 3 4 int userId = Integer.parseInt(request.getParameter("userId")); 5 UserDao userDao = new UserDao(); 6 UserVo user = userDao.selectOneUserInfo(userId); 7 8 request.setAttribute("user", user); 9 request.getRequestDispatcher("/userupdate.jsp").forward(request, response); 10 }
2.信息修改頁面
用戶修改頁面中初始要顯示數據庫中的數據,對於不同的表單項有不同的初始化操作,效果圖如下:
userupdate.jsp頁面代碼如下:
1 <form name="myform" action ="servlet/ServletToUserUpdate" method="post"> 2 <table border = "1" align = "center" style="border-collapse:collapse;"> 3 <tr> <!-- 黃色部分代碼是為了數據修改的時候使用 -> 4 <td colspan="2">用戶修改<input type="hidden" name="userId" value='<%=user.getUserId() %>'/></td> 5 </tr> 6 <tr> 7 <td>用戶名</td> 8 <td class="tdstyle2"><input type="text" name="userName" value='<%=user.getUserName() %>'/></td> 9 </tr> 10 <tr> 11 <td>密 碼</td> 12 <td><input type="text" name="userPassword" value='<%=user.getUserPassword() %>'/></td> 13 </tr> 14 <tr> 15 <td>地 址</td> 16 <td> 17 <select name="userProvince" id="userProvince" onchange="addCity()"></select>省 18 <select name="userCity" id="userCity"></select>市 19 </td> 20 </tr> 21 <tr> 22 <td>性 別</td> 23 <td> 24 <input type="radio" id = "man" name="userSex" value="男" checked="checked" />男 25 <input type="radio" id = "woman"name="userSex" value="女" />女 26 </td> 27 </tr> 28 <tr> 29 <td>愛 好</td> 30 <td> 31 <input type="checkbox" name="userHobby" value="籃球" />籃球 32 <input type="checkbox" name="userHobby" value="足球" />足球 33 <input type="checkbox" name="userHobby" value="羽毛球" />羽毛球 34 <input type="checkbox" name="userHobby" value="跑步" />跑步 35 </td> 36 </tr> 37 <tr> 38 <td style="height:100px;">個<br/>人<br/>描<br/>述</td> 39 <td> 40 <textarea cols="10" rows="3" name="userDescribe"><%=user.getUserDescribe() %></textarea> 41 </td> 42 </tr> 43 <tr> 44 <td colspan="2"><input type = "submit" value = "修改" /></td> 45 </tr> 46 </table> 47 </form>
上面的代碼中已經對:userName、userPassword、userDescribe進行了數據同步操作,
下面來對省份、性別、愛好進行數據初始化
省份同步數據的時候可以在循環生成option的時候進行判斷,選擇相同的省份和城市,操作如下:
1 var proArry = [ "河南", "河北", "山東" ]; 2 var cityArray = [ [ "鄭州", "南陽", "洛陽" ], [ "石家庄", "邯鄲", "邢台" ],[ "濟南", "青島", "煙台" ] ]; 3 //定義城市,省份數組 4 function addProvince() { 5 //增減省份數據 6 var proObj = document.getElementById("userProvince"); 7 //得到省份對象 8 9 for ( var i = 0; i < proArry.length; i++) { 10 11 var newOption = new Option(); 12 newOption.value = proArry[i]; 13 newOption.innerHTML = proArry[i]; 14 proObj.options.add(newOption); 15 if('<%=user.getUserProvince() %>'==proArry[i]){ 16 proObj.options[i].selected=true; 17 } 18 } 19 addCity(); 20 } 21 function addCity() { 22 23 var proObjSelected = document.getElementById("userProvince").selectedIndex; 24 var cityObj = document.getElementById("userCity"); 25 cityObj.length = 0; 26 for ( var i = 0; i < cityArray.length; i++) { 27 28 var newOption = new Option(); 29 newOption.value = cityArray[proObjSelected][i]; 30 newOption.innerHTML = cityArray[proObjSelected][i]; 31 cityObj.options.add(newOption); 32 if('<%=user.getUserCity() %>'==cityArray[proObjSelected][i]){ 33 cityObj.options[i].selected=true; 34 } 35 } 36 }
性別同步是拿數據庫中的值與前台相比,如果相同,選中。
1 function setValue(){ 2 if('<%= user.getUserSex() %>'=="男"){ 3 document.getElementById("man").checked="checked"; 4 }else{ 5 document.getElementById("woman").checked="checked"; 6 } 7 8 }
其中比較繞的是愛好的選中,因為數據庫中的愛好是一個字符串,前台頁面是幾個checkbox框,如何選中呢?
我們可以將字符串截取為包含幾個元素的集合,然后循環遍歷,與checkbox集合比較,相同則選中。
1 function setHob(){ 2 3 var objHobby = document.getElementsByName("userHobby"); 4 5 var hobbyStr = '<%=user.getUserHobby()%>'; 6 var hob = hobbyStr.split(",") ; 7 8 for(var i =0;i<objHobby.length ;i++ ){ 9 10 for(var j = 0; j<hob.length ; j++ ){ 11 12 if(hob[j] == objHobby[i].value){ 13 objHobby[i].checked = "checked"; 14 } 15 } 16 17 } 18 }
當用戶修改完信息,點擊修改按鈕之后,數據會被提交到ServletToUserUpdate.java 的doPost()中,servlet得到前台頁面信息之后,轉存VO對象中,這部分代碼如同注冊
省略不寫(詳見:.注冊servlet),然后調用UserDao中的方法。
1 UserDao userDao = new UserDao(); 2 userDao.updateUser(user); 3 4 ArrayList<UserVo> list=userDao.selectNotDeleteList(); 5 request.setAttribute("list", list); 6 request.getRequestDispatcher("/userlist.jsp").forward(request, response);
3.修改方法updateUser(UserVo user)
1 public void updateUser(UserVo user) { 2 Dbmanage dbmanage = new Dbmanage(); 3 Connection conn = null; 4 Statement sta = null; 5 6 try { 7 conn = dbmanage.initDB(); 8 sta = conn.createStatement(); 9 String sql = "UPDATE userTable SET user_name= '" 10 + user.getUserName() + "', user_password= '" 11 + user.getUserPassword() + "', user_province= '" 12 + user.getUserProvince() + "', user_city= '" 13 + user.getUserCity() + "', user_sex= '" + user.getUserSex() 14 + "', user_hobby= '" + user.getUserHobby() 15 + "', user_describe= '" + user.getUserDescribe() 16 + "' WHERE user_id= " + user.getUserId(); 17 System.out.println(sql); 18 sta.executeUpdate(sql); 19 System.out.println("update success"); 20 } catch (SQLException e) { 21 22 e.printStackTrace(); 23 } finally { 24 // 執行完關閉數據庫 25 dbmanage.closeDB(sta, conn); 26 } 27 28 }
到這里,這個簡單的工程實例就算是做完了,但是其中還仍有許多的不足,由於是入門級實例,先這樣吧,慢慢提高吧~!
鏈接導航 1.數據庫及表創建