商家後臺頁面密碼修改問題—採用button提交數據,後端servlet一直取不到值

問題描述


在後臺頁面中,需要輸入舊密碼,跟兩次新密碼,然後提交以後,更新密碼!

但是在這裏遇到一個問題,點擊提交以後,我的數據在後臺怎麼也取不到!

後臺servlet代碼:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("UTF-8");
		UserService us = new UserServiceImpl();
		User user = new User();
   	  String password = request.getParameter("password");
   	  String new_password = request.getParameter("new_password");
   	  user =  (User) request.getSession().getAttribute("user");
   	 System.out.println("password="+password+"new="+new_password+"user.getUsername()="+user.getUsername());
      int i=us.updateUser(user.getUsername(), password,new_password);
		if(i==1){
			System.out.println("密碼更新成功!");
			request.getSession().setAttribute("user", user);
		request.getRequestDispatcher("/admin/personal/shop_info.jsp").forward(request, response);
		//	request.getRequestDispatcher("/admin/login/home.jsp").forward(request, response);
		}else{
			System.out.println("密碼更新失敗!");
		//	response.sendRedirect("/shop_Register/admin/login/register.jsp?error=yes");
			request.getRequestDispatcher("/admin/personal/shop_info.jsp").forward(request, response);
		}
	}

前端jsp代碼
		<tr>
                  <td width="10%"style="text-align: right;"><font size="2px">舊密碼</font></td>
		  <td width="55%"><input type="password" name="password" id ="password" class="txtinput"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;	</td>					
						</tr>
		<tr>
		<td width="45%" style="text-align: right;"><font size="2px">新密碼</font></td>
			<td width="55%"><input type="password" name="new_password" id ="new_password" class="txtinput"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;		</td>
							</tr>
							  <tr>
			<td style="text-align: right;"><font size="2px">重複新密碼</font></td>
			<td><input type="password" name="new_repassword" id="new_repassword" class="txtinput">&nbsp;&nbsp;&nbsp;&nbsp;	&nbsp;&nbsp;&nbsp;&nbsp;	</td>
	               <td><input type="hidden"  name="pas" id ="pas" value = "<%=user.getPassword() %>"/></td>
			        <!-- 
					把對象密碼取出來隱藏掉,後面在取值比較
				-->
					</tr>
<td width="100%" style="text-align:center">
			<input type="button" value ="提交" οnclick="window.location.href=('${pageContext.request.contextPath}/servlet/UpdateUserServlet')"/></td> 
屢次提交,後臺獲取的數據都爲Null,所以定位到問題在按鈕的事件上,type="button",跟type="submit"是有區別的,submit是特殊的button,如果因爲涉及到提交數據,所以應該要採用submit,這樣可以直接提交數據到servlet,一般同學的情況應該都在這裏,但是,我的問題是換成submit提交,會調用另一個方法,因爲這個頁面本身進來就加載數據了,所以改成submit沒有效果。


後來就把onclick方法改變了,改成一下invock()方法

	<td width="100%" style="text-align:center">
			<input type="button" value ="提交" οnclick="invoke()"/></td>   
function invoke(){ 
  var p=document.getElementById("password").value;
  var np=document.getElementById("new_password").value;
  var nrp=document.getElementById("new_repassword").value;
  location.href="${pageContext.request.contextPath}/servlet/UpdateUserServlet?password="+p+"&new_password="+np;  
}  
</script>   
通過 var p=document.getElementById("password").value;
      location.href="${pageContext.request.contextPath}/servlet/UpdateUserServlet?password="+p+"&new_password="+np; 這樣的方法來調取參數password和new_password的值,並且反饋給後臺,通過輸出,就看到獲取到這兩個參數。


問題二

對於密碼的驗證,本來修改密碼,需要驗證舊密碼是否匹配,應該是回去前端頁面的密碼,然後交給後臺處理,如果對的,才能修改成功,但是,這樣就多調用了一次,其實,我這裏採用了一中比較取巧的辦法,因爲頁面登錄進來以後,session是存有User的所有信息,包括用戶名和密碼,所以,就不要再到後臺去取了

<%
User user=(User)request.getSession().getAttribute("user");
%>

 <td><input type="hidden"  name="pas" id ="pas" value = "<%=user.getPassword() %>"/></td>
			        <!-- 
					把對象密碼取出來隱藏掉,後面在取值比較
				-->

這裏把密碼隱藏掉,就看不見了,然後取出來在jsp中比較就可以了。

<script>
function invoke(){ 
 var  pass = document.getElementById("pas").value;
  var p=document.getElementById("password").value;
  var np=document.getElementById("new_password").value;
  var nrp=document.getElementById("new_repassword").value;
  if(p == ""){
	  alert("舊密碼不能爲空!");
	  return false;
  }else if(np == ""){
	  alert("新密碼不能爲空!");
	  return false;
  }else if(np != nrp){
	  alert("兩次密碼輸入不同!");
	  return false;
  }else if(pass != p){
	  alert("舊密碼輸入不正確!");
	  return false;
  }
  location.href="${pageContext.request.contextPath}/servlet/UpdateUserServlet?password="+p+"&new_password="+np;  
}  
</script>   

取出用戶的密碼,然後與我輸入的舊密碼進行比較,如果不符,就直接彈出來提示用戶,省去了一次在調用數據庫的任務。還有做了一些爲空的驗證。問題到這裏就基本解決了。



發佈了65 篇原創文章 · 獲贊 132 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章