Java程序员从笨鸟到菜鸟之(七十五)细谈struts2(十四)struts2+ajax实现异步验证...
? ? ??
? ? ? ? ?由于老師布置作業(yè)的需要,在添加管理員的時候,要實(shí)現(xiàn)驗(yàn)證添加的管理員的用戶名是否在數(shù)據(jù)庫中已經(jīng)存在,然后再客戶端給用戶一個提示。我首先想到的就是利用ajax實(shí)現(xiàn)異步驗(yàn)證技術(shù),由于利用的ssh框架,所以在這要對struts2和ajax進(jìn)行整合,由于我還沒把ajax的一些知識總結(jié)出來,所以在這也不提了,有關(guān)ajax的詳細(xì)內(nèi)容將會在以后的博客中寫出來。現(xiàn)在我們就以我做的這個添加管理員,驗(yàn)證管理員的用戶名是否存在來說一下這個struts2+ajax實(shí)現(xiàn)異步驗(yàn)證技術(shù)。
?????首先我們來看一下我們的form表單:
<td> 用戶名 </td> <td> <input type="text" name="admin.username" value="" οnblur="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>
我們可以看到當(dāng)我們的用戶名的文本域注冊了一個onblur事件,當(dāng)用戶名這個文本域失去焦點(diǎn)的時候我們就會讓他去執(zhí)行checkusername方法,好,下面讓我們來看一下我們的js是怎么實(shí)現(xiàn)的ajax:
<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 = "用戶名應(yīng)該不小于3位"; return; } else { if (window.ActiveXObject) // IE瀏覽器 { xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) //除IE外的其他瀏覽器實(shí)現(xiàn) { xmlHttpRequest = new XMLHttpRequest(); } if (null != xmlHttpRequest) { //當(dāng)利用get方法訪問服務(wù)器端時帶參數(shù)的話,直接在"AjaxServlet"后面加參數(shù), 下面send方法為參數(shù)null就可以,用post方法這必須在把參數(shù)加在send參數(shù)內(nèi),如下 xmlHttpRequest.open("get", url+"?admin.username="+uername, true); //關(guān)聯(lián)好ajax的回調(diào)函數(shù) xmlHttpRequest.onreadystatechange = ajaxCallback; //真正向服務(wù)器端發(fā)送數(shù)據(jù) // 使用post方式提交,必須要加上如下一行,get方法就不必加此句 xmlHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlHttpRequest.send(null); } } } function ajaxCallback() { //ajax一次請求會改變四次狀態(tài),所以我們在第四次(即一次請求結(jié)束)進(jìn)行處理就OK, if (xmlHttpRequest.readyState == 4) { //請求成功 if (xmlHttpRequest.status == 200) { var responseText = xmlHttpRequest.responseText; document.getElementById("namemessage").innerHTML = responseText; } } } </script>
? ? ? ? ?通過上面的注釋我想大家應(yīng)該能看懂一些內(nèi)容吧,我們首先去驗(yàn)證填寫的內(nèi)容是否為空,如果為空就給用戶以提示。如果不為空的話就去判斷一下當(dāng)前的瀏覽器,然后根據(jù)瀏覽器去設(shè)置xmlHttpRequest對象,xmlHttpRequest對象是什么東西呢?XMLHttpRequest?對象用于在后臺與服務(wù)器交換數(shù)據(jù)的對象,他主要的作用:
·?在不重新加載頁面的情況下更新網(wǎng)頁
·?在頁面已加載后從服務(wù)器請求數(shù)據(jù)
·?在頁面已加載后從服務(wù)器接收數(shù)據(jù)
·?在后臺向服務(wù)器發(fā)送數(shù)據(jù)
XMLHttpRequest是Ajax最核心的對象,它有以下幾個重要的方法或?qū)傩?#xff1a;
????●open():建立到服務(wù)器的新請求。
????●send():向服務(wù)器發(fā)送請求。
????●abort():退出當(dāng)前請求。
????●readyState:提供當(dāng)前?HTML?的就緒狀態(tài)。
????●responseText:服務(wù)器返回的請求響應(yīng)文本。
?其中XMLHttpRequest?對象的?open()?方法有以下五個參數(shù):
?●request-type:發(fā)送請求的類型。典型的值是?GET?或?POST,但也可以發(fā)送?HEAD?請求。
?●url:要連接的?URL。
?●asynch:如果希望使用異步連接則為true,否則為?false。該參數(shù)是可選的,默認(rèn)為?true。
?●username:如果需要身份驗(yàn)證,則可以在此指定用戶名。該可選參數(shù)沒有默認(rèn)值。
●password:如果需要身份驗(yàn)證,則可以在此指定口令。該可選參數(shù)沒有默認(rèn)值。
? ? ? ? 通常使用其中的前三個參數(shù)。事實(shí)上,即使需要異步連接,也應(yīng)該指定第三個參數(shù)為?“true”。這是默認(rèn)值,但堅(jiān)持明確指定請求是異步的還是同步的更容易理解。
? ? ? ? ? 得到XMLHttpRequest?對象之后,我們就利用這個對象去后臺執(zhí)行我們的請求,在執(zhí)行我們請求的時候一定要注意關(guān)聯(lián)好我們的回調(diào)函數(shù):xmlHttpRequest.onreadystatechange?=?ajaxCallback;這里的回調(diào)函數(shù)的名字可以隨便起,并不是固定死的。我們可以看到我們上面的程序請求是發(fā)送給了AdminAction中的exists方法了,好,下面我們?nèi)?/span>action方法里面去看一下:
public String exists() throws Exception{ System.out.println(admin==null); boolean boo=dao.exists(admin.getUsername()); //獲取原始的PrintWriter對象,以便輸出響應(yīng)結(jié)果,而不用跳轉(zhuǎn)到某個試圖 HttpServletResponse response = ServletActionContext.getResponse(); //設(shè)置字符集 response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); if(boo){ //直接輸入響應(yīng)的內(nèi)容 out.println("*用戶名已存在*"); /**格式化輸出時間**/ out.flush(); out.close(); } out.println("*用戶名可用*"); return null; }
??????熟悉ajax的同學(xué)看到這段代碼應(yīng)該很清楚了吧。這里主要是利用了PrintWriter?來把我們的后臺信息輸出到我們的前臺,這里我?就不詳細(xì)解釋了。好了,寫到這,我們這個利用struts2+ajax實(shí)現(xiàn)的我們的異步驗(yàn)證。下面就是具體的實(shí)現(xiàn)效果:
轉(zhuǎn)載于:https://blog.51cto.com/javacsh/1129074
總結(jié)
以上是生活随笔為你收集整理的Java程序员从笨鸟到菜鸟之(七十五)细谈struts2(十四)struts2+ajax实现异步验证...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人的价值不在于能力,而在于位置 » 社区
- 下一篇: Java 连接池的工作原理