Struts2+Spring2+Hibernate3架構中JQuery ajax的實現
來源:互聯網
上載者:User
最近在做一個項目,算是邊寫邊學一些東西吧。把struts2+spring2+hibernate3的架構搭好跑通之後,遇到了要做使用者名稱驗證,想到要用Ajax來做。以前都是自己手寫的,這次就想試試看用組件來做,網上看了看現在主流的ajax組件主要有ext、dwr、jquery。試了下用dwr,感覺蠻簡單的,但是在詢問了同事之後,說是dwr只是ajax組件,而且據說曾經遇到過bug,推薦我用jquery。網上看了一下jquery的東西,雖說要顛覆一些自己平時js的編碼習慣,但是這個東西確實是不錯,研究了一個晚上總算把jquery ajax在MVC架構中給配好了,不容易啊,呵呵,以下為相關代碼(唯寫出關鍵區段,需要完整source的可以E-mail給我)
register.jsp 用於註冊的頁面 由這個頁面發起ajax 也是最關鍵的頁面
Java代碼 $(document).ready(function(){ //當userid控制項失去焦點時 $("#stUserId").blur(function(){ var stUserId=$("#stUserId"); //啟動jquery的ajax $.ajax({ //以get方式ajax type: "get", //ajax的地址 這裡我用的是一個action 配置請看下面的struts配置 url: "ajaxUserId", //發送給ajax的值 以key:value方式儲存 最終為拼接到url的後面 data: {stUserId:stUserId.val()}, //這裡有一個關鍵的地方 是否使用緩衝中資料進行提交,預設為true //如果是true的話 如果你之前提交過stUserId=test,那麼以後當 //你的stUserId=test的時候就不會觸發ajax了 cache: false, //當調用成功時 data是返回的值 textStatus是狀態(成功或失敗) success: function(data, textStatus){ alert(data); } }); }); });
發生ajax之後會通過struts尋找action
struts.xml
Java代碼 //action的name就是上張頁面中ajax的url //去尋找spring中的id為registAction的bean 並調用它的java類中ajaxUserId()方法 <action name="ajaxUserId" class="registAction" method="ajaxUserId"> //將傳回值發送到以下頁面 <result>/sysUser/ajaxUser.jsp</result> </action>
spring.xml
Java代碼 //等於是去找SysUserBasicImpl類中的ajaxUserId()方法 <bean id="registAction" class="com.myweb.action.SysUserBasicImpl" scope="prototype"> <property name="sysUserBasicDAO"> <ref local="SysUserBasicDAO"/> </property> </bean>
SysUserBasicImpl.java
Java代碼 //用於得到ajax傳過來的stUserId參數 private String stUserId; //傳回值是一個boolean值 顯示是否存在該userid private boolean isExist; //讓ajaxUser.jsp頁面可以得到傳回值isExist public boolean getIsExist(){ return isExist; } //讓spring將stUserId值注射進來 public void setStUserId(String stUserId) { this.stUserId = stUserId; } //ajax調用的方法 public String ajaxUserId(){ List list=sysUserBasicDAO.getHibernateTemplate().find(" from SysUserBasic where ST_USER_ID=?",stUserId); isExist = (list.size()>0); return SUCCESS; }
ajaxUser.jsp 用於得到傳回值
Java代碼 //使用struts標籤 <%@ taglib uri="/struts-tags" prefix="s" %> //將傳回值輸出出來 讓ajax發出頁面可以得到這個頁面的值 <s:property value="isExist"/>