Struts2之—自訂結果集實現ajax

來源:互聯網
上載者:User

標籤:style   blog   http   color   java   os   使用   io   strong   

      項目中我們經常遇到這樣的需求——頁面部分重新整理,例如:添加使用者,轉到添加使用者頁面時,頁面自動載入了所有部門。

完整流程:選擇所屬部門,填寫使用者名稱和密碼,點擊“註冊”

填寫使用者名稱後,需要立即檢查資料庫是否存在此使用者名稱,如何在不重新整理頁面的情況下實現此效果?


但看上面提出的問題並不難,情況很常見,都知道使用ajax實現,但是如何在struts中自訂結果集來實現ajax——這是這篇部落格的重點。

servlet要麼轉寄要麼重新導向,struts2可以自訂結果集)

 

   轉寄、重新導向、action2action都會使頁面重新整理,滿足不了頁面無重新整理的需求,因此,可以自己定義一個結果集來解決(通過此結果集把伺服器端(action)的資料回調到用戶端)。

 

工具:MyEclipse8.5、tomcat6.0.39

一,步驟:

1,建立一個名稱為Struts+AjaxResult的Web項目

2,匯入Struts相關包


3,配置web.xml檔案

4,建立PoJo類——User.java

5,建立Action基類和子Action類——BaseAction、UserAction.java

6,建立自訂結果集——AjaxResult.java

7,配置Struts.xml檔案

8,建立頁面——add.jsp

9,建立js檔案——user_add.js

(註:還需引入jquery.js檔案)

 

----web.xml:設定檔(註:配置Struts2的核芯過濾器)

<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xmlversion="1.0" encoding="UTF-8"?><web-appversion="2.5"xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- 配置Struts2的核心的過濾器 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>    <welcome-file-list>   <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app></span>

 


----User.java:使用者實體類

<span style="font-family:KaiTi_GB2312;font-size:18px;">importjava.io.Serializable;public class Userimplements Serializable{private Long uid;//使用者idprivate String username;//使用者名稱private String password;//密碼 //*********get/set方法*********************************************publicLong getUid() {returnuid;} publicvoid setUid(Long uid) {this.uid= uid;} publicString getUsername() {returnusername;} publicvoid setUsername(String username) {this.username= username;} publicString getPassword() {returnpassword;} publicvoid setPassword(String password) {this.password= password;} }</span>

----BaseAction.java:抽象Action類,封裝公用內容

<span style="font-family:KaiTi_GB2312;font-size:18px;">importjava.lang.reflect.ParameterizedType; importcom.opensymphony.xwork2.ActionSupport;importcom.opensymphony.xwork2.ModelDriven; /** * 這裡封裝一些共用的內容 * @author Administrator * */public classBaseAction<T> extends ActionSupport implements ModelDriven<T>{privateClass classt;privateT t; publicstatic final String ADDUI = "addUI";publicString addUI = ADDUI; publicBaseAction(){try{ParameterizedTypetype = (ParameterizedType)this.getClass().getGenericSuperclass();this.classt= (Class)type.getActualTypeArguments()[0];this.t= (T)this.classt.newInstance();}catch(Exceptione){e.printStackTrace();}} publicT getModel() {//TODO Auto-generated method stubreturnthis.t;}}</span>


----UserAction.java:使用者模組處理 Action

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="color:#333333;">importcn.itcast.oa0909.domain.User;importcn.itcast.oa0909.struts2.action.base.BaseAction;importcom.opensymphony.xwork2.ActionContext; publicclass UserAction  extendsBaseAction<User>{ /** * 跳轉到添加使用者頁面 * @return */publicString addUI(){returnaddUI;}/** * 校正使用者名稱是否存在 * @return */publicString checkUserName(){ if("學敏".equals(this.getModel().getUsername())){//如果輸入的使用者名稱為"學敏"ActionContext.getContext().getValueStack().push("該使用者名稱已經存在");//把資料壓入棧頂}else{//如果輸入的使用者名稱就不是“學敏”ActionContext.getContext().getValueStack().push("該使用者名稱可以使用");//把資料壓入棧頂} returnSUCCESS;} }</span></span>
 

----AjaxResult.java:自訂結果集(註:通過此結果集把伺服器端(action)的資料回調到用戶端)

<span style="font-family:KaiTi_GB2312;font-size:18px;">importjavax.servlet.http.HttpServletResponse; importorg.apache.struts2.ServletActionContext; importcom.opensymphony.xwork2.ActionContext;importcom.opensymphony.xwork2.ActionInvocation;importcom.opensymphony.xwork2.Result; public classAjaxResult implements Result{publicvoid execute(ActionInvocation invocation) throws Exception {HttpServletResponseresponse = ServletActionContext.getResponse();response.setCharacterEncoding("utf-8");//處理中文亂碼問題String message =ActionContext.getContext().getValueStack().peek().toString();//得到棧頂元素response.getWriter().print(message);//將得到的棧頂元素返回到用戶端}}</span>


----struts.xml:Struts設定檔

<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xmlversion="1.0" encoding="UTF-8"?><!DOCTYPE strutsPUBLIC"-//ApacheSoftware Foundation//DTD Struts Configuration 2.1.7//EN""http://struts.apache.org/dtds/struts-2.1.7.dtd"><struts>   <!-- 設定檔改了以後不用重新啟動 -->   <constant name="struts.devMode"value="true"/>   <constantname="struts.ui.theme" value="simple"/>     <includefile="struts/struts-user.xml"></include> <!-- 配置自訂結果集--><packagename="ajax-default" extends="struts-default"><result-types><result-typename="ajax"class="cn.itcast.oa0909.result.AjaxResult"></result-type></result-types></package></struts>        </span>


----struts-user.xml

<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xmlversion="1.0" encoding="UTF-8"?><!DOCTYPE strutsPUBLIC"-//ApacheSoftware Foundation//DTD Struts Configuration 2.1.7//EN""http://struts.apache.org/dtds/struts-2.1.7.dtd"><struts>  <!--繼承Struts-default結果集 --> <package name="user"namespace="/" extends="struts-default">         <actionname="userAction_*" method="{1}"class="cn.itcast.oa0909.struts2.action.UserAction">                                 <resultname="addUI">WEB-INF/jsp/user/add.jsp</result>         </action>  </package>  <!-- 繼承自訂結果集——ajax-default(在struts.xml檔案中已配置) --> <package name="userjson"namespace="/" extends="ajax-default">         <actionname="userJSONAction_*" method="{1}"class="cn.itcast.oa0909.struts2.action.UserAction">                 <resulttype="ajax"></result>         </action>  </package> </struts>        </span>

----add.jsp:添加使用者頁面

<span style="font-family:KaiTi_GB2312;font-size:18px;"><%@ pagelanguage="java" import="java.util.*"pageEncoding="UTF-8"%><scriptlanguage="javascript"src="${pageContext.request.contextPath}/js/jquery-1.4.2.js"></script><scriptlanguage="javascript"src="${pageContext.request.contextPath}/js/user_add.js"></script><html><head><title>使用者資訊</title>    <metahttp-equiv="Content-Type" content="text/html;charset=utf-8" /></head><body><form action="userAction_add.action"><table>   <tr><tdwidth="100">所屬部門</td>       <td><selectname="departmentId" class="SelectStyle">            <optionvalue="0" selected="selected">請選擇部門</option>            <optionvalue="7">總經理室</option>            <optionvalue="1">市場部</option>            <optionvalue="2">諮詢部</option>            <optionvalue="3">招生部</option>            <optionvalue="4">教學部</option>            <optionvalue="5">後勤部</option>           </select>       </td>   </tr><tr>  <td>使用者名稱:</td>   <td><input type="text"name="username"/><labelid="message"></label></td></tr><tr> <td>密碼:</td>  <td><input type="password"name="password"/></td></tr><tr> <td colspan="2"><input type="submit"value="註冊"/></td> </tr> </table></form></body> </html></span>

(註:假設這裡的所屬部門中的資料是頁面載入時從資料庫中讀取的,而不是如上所示寫死的)

頁面效果:


 

所屬部門下拉框展開,如下所示:


-----user_add.js:添加使用者頁面所需js

<span style="font-family:KaiTi_GB2312;font-size:18px;">var user = {    //初始化事件    inintEvent: function(){       $("input[name='username']").unbind("blur");       $("input[name='username']").bind("blur",function(){//name值為"username"的文字框失去焦點觸發的函數                  user.checkUser($(this).val());//調用檢查使用者函數(校正使用者名稱是否存在)        });    },    /**     * 校正使用者名稱是否存在     */checkUser:function(username){           var a ="a";var parameter = {//參數:使用者名稱username:username}; /** *userJSONAction_checkUserName.action:請求地址 * parameter:參數 *function(data){}:回呼函數 */$.post("userJSONAction_checkUserName.action",parameter,function(data){   $("#message").text(data);//將伺服器返回的值賦給id="message"的label提示框,並顯示if(data=="該使用者名稱可以使用"){$("#message").css("color","blue");//設定提示文字的顏色}else{$("#message").css("color","red");//設定提示文字的顏色}});         }};//頁面載入時運行$().ready(function(){user.inintEvent();//頁面載入時,調用初始化事件</span>

二,運行

輸入地址:http://localhost:8080/Struts2+AjaxResult/userAction_addUI.action,顯示如下頁面


 



使用者名稱輸入“學敏”,資料庫中已經存在了此使用者名稱,則當滑鼠離開使用者名稱文字框(即,使用者名稱文字框失去焦點)時(註:此處為ajax請求,它的處理過程,和應用的技術點為本部落格講解的重點),就會提示“該使用者已經存在”;使用者名稱輸入“張三那”,資料庫中不存在,則提示“該使用者名稱可以使用”


三,總結

自訂結果集的缺點:

。。。。待續。。。




Struts2之—自訂結果集實現ajax

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.