你問我什么叫ajax,我也不太了解,我了解的是那支培養了無數荷蘭足球精華的Ajax,誰知道怎么有人用幾個單詞的頭字母也能湊出這個單詞來,不過感覺用它來做東西,應該會挺有意思的
比如當用戶在注冊的時候,用戶點一個按紐不用刷新界面就可以獲得一句提示,是有這人還是沒有這人啊?這次我嘗試了用ajax技術來做一個三級關鍵的下拉列表,而這是我要講的關鍵。
其實現在一般的ajax都是向Servlet發出請求,之后服務器響應,再偷摸的把結果傳給它,之后顯示出來,而換到Struts,有人會發甍,也一樣,Action是Servlet,DispatchAction也是,只要把代碼往這里寫,讓它往.do那里請求就行了。
在接下來我就向大家介紹我是怎樣實現上述功能的
因為大學里面的結構是這里的
學院-專業-班級-學生
在學生注冊的時候他是依賴于上述對象的,所以用戶注冊就需要一個三級的下拉選擇
而ajax就能象變魔術一樣,從服務器那里偷摸弄來您需要的列表
下面我先給大家展示一下第一個功能是怎么實現的吧?
當用戶在注冊的時候,點一個按紐,之后會彈出一個alert來告訴你這個用戶是否有人用了,下面就讓我們來看看這個功能是怎么實現的吧?
<html:button styleClass="cancel" property="submit" value="驗證用戶是否存在" onclick="teacherCheck()"/>
這里定義了按紐,用來測試老師是否已經存在了
大體的ajax的JS代碼都上面這四部分,
先是創建XMLHttpRequest,
var xmlHttp;
function createXMLHttpRequest()
{
?if (window.XMLHttpRequest)
?{
??xmlHttp = new XMLHttpRequest();
?}
?else if (window.ActiveXObject)
?{
??xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
??? }
}
之后是客戶響應部分的代碼
function teacherCheck()
{
?var f = document.TeacherRegisterForm 從表單里讀字段
?var user = f.user.value
?if(user=="")
?{
?window.alert("用戶名不能為空!")
??f.user.focus()
?return false
? ?}
?else
?{
??createXMLHttpRequest()??????? 這里都是精華了
??var url = "ajax.do?method=checkUserIsExist&user="+user?? 定義響應地址
??xmlHttp.open("GET",url, true)??? 發出響應
??xmlHttp.onreadystatechange = checkUser? 把從服務器得到的響應再傳給另個函數
??xmlHttp.send(null)
? ?}
}
function checkUser()
{
?if (xmlHttp.readyState == 4)
?{
??if (xmlHttp.status == 200)
??{
???alert(xmlHttp.responseText)??????? 這里是對響應結果的操作,在這里我們是灘出對話框,并把服務器發來的信息顯示出來
??}
?}
}
我把所有亂七八糟的操作都放到了一個DispatchAction里,所以它也不例外的在這個DA中了
public ActionForward checkUserIsExist( ActionMapping mapping,
??????????? ActionForm form, HttpServletRequest req, HttpServletResponse res )
??????????? throws Exception
??? {
??????? Service service = getService();
??????? res.getWriter().write(service.checkUserIsExistForAjax( req.getParameter( "user" ) ) );
??????? return null;
??? }
它僅僅是把業務邏輯部分的結果發送回去,而真正的判斷是在業務邏輯那里實現的,
public String checkUserIsExistForAjax( String user )把結果弄成String的形式傳回去
??? {
??????? Connection connection = null;
??????? PreparedStatement pstmt1 = null;
??????? ResultSet rs = null;
??????? try
??????? {
??????????? connection = getConnection();
??????????? pstmt1 = connection
??????????????????? .prepareStatement( "select * from user where user=?" );
??????????? pstmt1.setString( 1, user );
??????????? rs = pstmt1.executeQuery();
??????????? rs.last();
??????????? if ( rs.getRow() > 0 )
??????????? {
??????????????? return ID.M_EXIST; 用戶存在
??????????? }
??????? }
??????? catch ( Exception e )
??????? {
??????????? e.printStackTrace();
??????? }
??????? finally
??????? {
??????????? close( rs );
??????????? close( pstmt1 );
??????????? close( connection );
??????? }
??????? return ID.M_NOEXIST;用戶不存在
??? }