基於Struts2框架下實現Ajax有兩種方式,第一種是原聲的方式,另外一種是struts2自帶的一個插件。
js部分調用方式是一樣的:
JS代碼:
1 function testAjax() { 2 3 var $userNameInput = $("#ajax_username"); 4 var userName = $userNameInput.val(); 5 6 $.ajax({ 7 url : "originAjax.action", 8 type : "GET", 9 data : "ajaxField=" + userName, 10 success : function(data, textStatus) { 11 alert(data); 12 } 13 }); 14 }
第一種原生的實現方式:
Action中創建一個方法:
private String username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public void checkUserName() throws IOException { HttpServletResponse response = ServletActionContext.getResponse(); PrintWriter writer = response.getWriter(); writer.print("hello " + username); writer.flush(); writer.close(); }
struts.xml中配置:
<action name="originAjax" class="TestAction" method="checkUserName" />
這種方式不太推薦使用。
這里重點講解下第二種方式:
1.引入struts2-json-plugin-2.5.2.jar
2.Action中添加類似的如下代碼:
private String result; public String getResult() { return result; } public void setResult(String result) { this.result = result; } /** * * AJAX for check MerchantAccount start * * */ private String merchantAccount; public String getMerchantAccount() { return merchantAccount; } public void setMerchantAccount(String merchantAccount) { this.merchantAccount = merchantAccount; } // AJAX for check Merchant public String checkMerchantAccountMethod() throws IOException { AppResultJsonBean ajaxResultJsonBean = new AppResultJsonBean(); if (StarCloudStringUtils.isEmpty(merchantAccount)) { ajaxResultJsonBean.setIsOK(false); ajaxResultJsonBean.setData(null); ajaxResultJsonBean.setResultCode(-1); ajaxResultJsonBean.setResultMessage("商家賬號不能為空"); ajaxResultJsonBean.setOther(null); JSONObject ajaxResultJsonData = JSONObject .fromObject(ajaxResultJsonBean); this.result = ajaxResultJsonData.toString(); return SUCCESS; } if (!StarCloudStringUtils.isMobile(merchantAccount)) { ajaxResultJsonBean.setIsOK(false); ajaxResultJsonBean.setData(null); ajaxResultJsonBean.setResultCode(-2); ajaxResultJsonBean.setResultMessage("商家賬號格式不合法"); ajaxResultJsonBean.setOther(null); JSONObject ajaxResultJsonData = JSONObject.fromObject(ajaxResultJsonBean); this.result = ajaxResultJsonData.toString(); return SUCCESS; } 。。。 MerchantBean checkMerchantBean = merchantIService.findMerchantByAccount(merchantAccount); if (checkMerchantBean != null) { ajaxResultJsonBean.setIsOK(true); ajaxResultJsonBean.setData(null); ajaxResultJsonBean.setResultCode(0); ajaxResultJsonBean.setResultMessage("商家賬號可用"); ajaxResultJsonBean.setOther(null); JSONObject ajaxResultJsonData = JSONObject.fromObject(ajaxResultJsonBean); this.result = ajaxResultJsonData.toString(); return SUCCESS; } else { ajaxResultJsonBean.setIsOK(false); ajaxResultJsonBean.setData(null); ajaxResultJsonBean.setResultCode(-3); ajaxResultJsonBean.setResultMessage("商家賬號不存在"); ajaxResultJsonBean.setOther(null); JSONObject ajaxResultJsonData = JSONObject.fromObject(ajaxResultJsonBean); this.result = ajaxResultJsonData.toString(); return SUCCESS; } } /** * * AJAX for check MerchantAccount start end * * */
Struts.xml中配置如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <!-- AJAX 1.引入Jar包 2.所在包必須要繼承自JSON-default 3.resultType是JSON 4.附加了一個參數excludeNullProperties,目的是不序列化Action里為null的字段。 5.<result>元素沒有name屬性,也沒有跳轉值 --> <package name="struts_web_product_ajax" extends="json-default"> <!-- 新增商品信息檢查賬號 --> <action name="checkMerchantAccountAction" class="controllers.actions.web.product.PrepareAddProductAction" method="checkMerchantAccountMethod"> <result type="json"> <param name="excludeNullProperties">true</param> <param name="root">result</param> </result> </action> </package> </struts>
JS中接受返回結果:
返回JSON格式:
JS解析如下:
function checkMerchantAccountAjax() { var $merchantAccount = $("#merchantAccount"); var merchantAccount = $merchantAccount.val(); $.ajax({ url : "checkMerchantAccountAction", type : "GET", data : "merchantAccount=" + merchantAccount, success : function(data, textStatus) { var resultJSONData = JSON.parse(data);//注意這里必須有,因為之前返回的是result="json字符串",但並類型不是JSON if(resultJSONData.isOK){ $merchantAccount.css("color", "black"); return true; }else{ $merchantAccount.css("color", "red"); layer.tips(resultJSONData.resultMessage,$merchantAccount, { tips : [3, '#3595CC'], time : 4000 });//end tips return false; }//end else }//end success });//end ajax }// end js