Strust2第(十四)篇《struts2+ajax實現異步驗證》

本文來自:曹勝歡博客專欄。轉載請註明出處:http://blog.csdn.net/csh624366188

由於老師佈置作業的需要,在添加管理員的時候,要實現驗證添加的管理員的用戶名是否在數據庫中已經存在,然後再客戶端給用戶一個提示。我首先想到的就是利用ajax實現異步驗證技術,由於利用的ssh框架,所以在這要對struts2ajax進行整合,由於我還沒把ajax的一些知識總結出來,所以在這也不提了,有關ajax的詳細內容將會在以後的博客中寫出來。現在我們就以我做的這個添加管理員,驗證管理員的用戶名是否存在來說一下這個struts2+ajax實現異步驗證技術。

     首先我們來看一下我們的form表單:

  1. <td>  
  2. 用戶名  
  3. </td>  
  4. <td>  
  5. <input type="text" name="admin.username" value=""  
  6. onblur="checkusername(this,'AdminAction!exists')" />  
  7. </td>  
  8. <td>  
  9. <span id="namemessage" style="color: red;"></span>  
  10. </td>  
  11. </tr>  
  12. <tr bgColor="#d6fdd0">  
  13. <td>  
  14. 密碼  
  15. </td>  
  16. <td>  
  17. <input type="password" name="admin.password" value="" />  
  18. </td>  
  19. <td>  
  20. <span></span>  
  21. </td>  
  22. </tr>  
<td>
用戶名
</td>
<td>
<input type="text" name="admin.username" value=""
onblur="checkusername(this,'AdminAction!exists')" />
</td>
<td>
<span id="namemessage" style="color: red;"></span>
</td>
</tr>
<tr bgColor="#d6fdd0">
<td>
密碼
</td>
<td>
<input type="password" name="admin.password" value="" />
</td>
<td>
<span></span>
</td>
</tr>


我們可以看到當我們的用戶名的文本域註冊了一個onblur事件,當用戶名這個文本域失去焦點的時候我們就會讓他去執行checkusername方法,好,下面讓我們來看一下我們的js是怎麼實現的ajax

  1. <script type="text/javascript">  
  2. var xmlHttpRequest = null//聲明一個空對象以接收XMLHttpRequest對象  
  3. function checkusername(field, url) {  
  4. var uername = field.value;  
  5. if (uername == "" || uername.length < 3) {  
  6. document.getElementById("namemessage").innerHTML = "用戶名應該不小於3位";  
  7. return;  
  8. else {  
  9. if (window.ActiveXObject) // IE瀏覽器  
  10. {  
  11. xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");  
  12. else if (window.XMLHttpRequest) //除IE外的其他瀏覽器實現  
  13. {  
  14. xmlHttpRequest = new XMLHttpRequest();  
  15. }  
  16. if (null != xmlHttpRequest) {  
  17. //當利用get方法訪問服務器端時帶參數的話,直接在"AjaxServlet"後面加參數,                   下面send方法爲參數null就可以,用post方法這必須在把參數加在send參數內,如下  
  18. xmlHttpRequest.open("get", url+"?admin.username="+uername, true);  
  19. //關聯好ajax的回調函數   
  20. xmlHttpRequest.onreadystatechange = ajaxCallback;  
  21. //真正向服務器端發送數據   
  22. // 使用post方式提交,必須要加上如下一行,get方法就不必加此句   
  23. xmlHttpRequest.setRequestHeader("Content-Type",  
  24. "application/x-www-form-urlencoded");  
  25. xmlHttpRequest.send(null);  
  26. }  
  27. }  
  28. }  
  29. function ajaxCallback() { //ajax一次請求會改變四次狀態,所以我們在第四次(即一次請求結束)進行處理就OK,  
  30. if (xmlHttpRequest.readyState == 4) { //請求成功  
  31. if (xmlHttpRequest.status == 200) {  
  32. var responseText = xmlHttpRequest.responseText;  
  33. document.getElementById("namemessage").innerHTML = responseText;  
  34. }  
  35. }  
  36. }  
  37. </script>  
<script type="text/javascript">
var xmlHttpRequest = null; //聲明一個空對象以接收XMLHttpRequest對象
function checkusername(field, url) {
var uername = field.value;
if (uername == "" || uername.length < 3) {
document.getElementById("namemessage").innerHTML = "用戶名應該不小於3位";
return;
} else {
if (window.ActiveXObject) // IE瀏覽器
{
xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} else if (window.XMLHttpRequest) //除IE外的其他瀏覽器實現
{
xmlHttpRequest = new XMLHttpRequest();
}
if (null != xmlHttpRequest) {
//當利用get方法訪問服務器端時帶參數的話,直接在"AjaxServlet"後面加參數,                   下面send方法爲參數null就可以,用post方法這必須在把參數加在send參數內,如下
xmlHttpRequest.open("get", url+"?admin.username="+uername, true);
//關聯好ajax的回調函數
xmlHttpRequest.onreadystatechange = ajaxCallback;
//真正向服務器端發送數據
// 使用post方式提交,必須要加上如下一行,get方法就不必加此句
xmlHttpRequest.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
xmlHttpRequest.send(null);
}
}
}
function ajaxCallback() { //ajax一次請求會改變四次狀態,所以我們在第四次(即一次請求結束)進行處理就OK,
if (xmlHttpRequest.readyState == 4) { //請求成功
if (xmlHttpRequest.status == 200) {
var responseText = xmlHttpRequest.responseText;
document.getElementById("namemessage").innerHTML = responseText;
}
}
}
</script>


         通過上面的註釋我想大家應該能看懂一些內容吧,我們首先去驗證填寫的內容是否爲空,如果爲空就給用戶以提示。如果不爲空的話就去判斷一下當前的瀏覽器,然後根據瀏覽器去設置xmlHttpRequest對象,xmlHttpRequest對象是什麼東西呢?XMLHttpRequest 對象用於在後臺與服務器交換數據的對象,他主要的作用:

· 在不重新加載頁面的情況下更新網頁

· 在頁面已加載後從服務器請求數據

· 在頁面已加載後從服務器接收數據

· 在後臺向服務器發送數據


XMLHttpRequestAjax最核心的對象,它有以下幾個重要的方法或屬性:
    ●open():建立到服務器的新請求。

    ●send():向服務器發送請求。

    ●abort():退出當前請求。

    ●readyState:提供當前 HTML 的就緒狀態。

    ●responseText:服務器返回的請求響應文本。


 其中XMLHttpRequest 對象的 open() 方法有以下五個參數:

 ●request-type:發送請求的類型。典型的值是 GET 或 POST,但也可以發送 HEAD 請求。

 ●url:要連接的 URL

 ●asynch:如果希望使用異步連接則爲true,否則爲 false。該參數是可選的,默認爲 true

 ●username:如果需要身份驗證,則可以在此指定用戶名。該可選參數沒有默認值。

password:如果需要身份驗證,則可以在此指定口令。該可選參數沒有默認值。


        通常使用其中的前三個參數。事實上,即使需要異步連接,也應該指定第三個參數爲 true。這是默認值,但堅持明確指定請求是異步的還是同步的更容易理解。

          得到XMLHttpRequest 對象之後,我們就利用這個對象去後臺執行我們的請求,在執行我們請求的時候一定要注意關聯好我們的回調函數:xmlHttpRequest.onreadystatechange = ajaxCallback;這裏的回調函數的名字可以隨便起,並不是固定死的。我們可以看到我們上面的程序請求是發送給了AdminAction中的exists方法了,好,下面我們去action方法裏面去看一下:

  1. public String exists() throws Exception{  
  2. System.out.println(admin==null);  
  3. boolean boo=dao.exists(admin.getUsername());  
  4.   //獲取原始的PrintWriter對象,以便輸出響應結果,而不用跳轉到某個試圖      
  5.         HttpServletResponse response = ServletActionContext.getResponse();      
  6.         //設置字符集       
  7.         response.setCharacterEncoding("UTF-8");      
  8.         PrintWriter out = response.getWriter();      
  9. if(boo){           
  10.         //直接輸入響應的內容       
  11.         out.println("*用戶名已存在*");      
  12.         /**格式化輸出時間**/     
  13.         out.flush();      
  14.         out.close();      
  15. }  
  16. out.println("*用戶名可用*");   
  17. return null;  
  18. }  
public String exists() throws Exception{
System.out.println(admin==null);
boolean boo=dao.exists(admin.getUsername());
  //獲取原始的PrintWriter對象,以便輸出響應結果,而不用跳轉到某個試圖    
        HttpServletResponse response = ServletActionContext.getResponse();    
        //設置字符集    
        response.setCharacterEncoding("UTF-8");    
        PrintWriter out = response.getWriter();    
if(boo){	     
        //直接輸入響應的內容    
        out.println("*用戶名已存在*");    
        /**格式化輸出時間**/   
        out.flush();    
        out.close();    
}
out.println("*用戶名可用*"); 
return null;
}


      熟悉ajax的同學看到這段代碼應該很清楚了吧。這裏主要是利用了PrintWriter 來把我們的後臺信息輸出到我們的前臺,這裏我 就不詳細解釋了。好了,寫到這,我們這個利用struts2+ajax實現的我們的異步驗證。下面就是具體的實現效果:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章