標籤:
1、引入json外掛程式包
<!-- 引入struts2的json外掛程式 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-json-plugin</artifactId> <version>${struts.version}</version> </dependency>
2、配置xml,extends="json-default",<result name="success" type="json"></result>
<?xml version="1.0"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"><struts> <package name="indexPackage" namespace="/" extends="json-default"> <action name="indexAction_*" class="indexAction" method="{1}"> <result name="success" type="json"></result> </action> </package></struts>
3、Action中使用
package cn.sniper.project.action;import org.apache.struts2.json.annotations.JSON;@Controller("indexAction")@Scope("prototype")public class IndexAction extends BaseAction<UserVo> { private static final long serialVersionUID = -8269406543148672672L; //登入預設是失敗 private String login = FAIL; /** * 跳轉到登入頁面 * @return */ public String login() { return LOGIN; } /** * 登入 * @return */ public String doLogin() { UserVo user = this.getModel(); if(user.getUsername().equals(user.getPassword())) { this.setLogin(SUCCESS); //json只能擷取得到棧頂元素 super.push(this.login); return SUCCESS; } else { throw new RuntimeException(); } } /** * 登入成功後首頁 * @return */ public String index() { return INDEX; } @JSON(name="login") public String getLogin() { return login; } public void setLogin(String login) { this.login = login; }}
4、json相關:
a、傳遞到頁面的json對象為棧頂元素b、重新命名json對象 @JSON(name="login") public String getLogin() { return login; }c、設定屬性不做json序列化 @JSON(serialize=false) public String getLogin() { return login; } d、格式化日期 @JSON(format="yyyy-MM-dd") public String getDate() { return date; }
5、json外掛程式原理,查看struts2-json-plugin.jar根目錄下的struts-plugin.xml檔案,發現json-default本身繼承自struts-default,並且自訂了類型json:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <package name="json-default" extends="struts-default"> <result-types> <result-type name="json" class="org.apache.struts2.json.JSONResult"/> </result-types> <interceptors> <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/> <interceptor name="jsonValidation" class="org.apache.struts2.json.JSONValidationInterceptor"/> <!-- Sample JSON validation stack --> <interceptor-stack name="jsonValidationWorkflowStack"> <interceptor-ref name="basicStack"/> <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel</param> </interceptor-ref> <interceptor-ref name="jsonValidation"/> <interceptor-ref name="workflow"/> </interceptor-stack> </interceptors> </package></struts>
6、訪問頁面:
$.ajax({ url : baseURL + ‘/indexAction_doLogin.action‘, type : ‘post‘, data : { username : $(‘#username‘).val(), password : $(‘#password‘).val(), }, beforeSend : function () { $.messager.progress({ text : ‘正在登入中...‘, }); }, success : function (data, response, status) { $.messager.progress(‘close‘); /** * 為什麼data不採用boolean類型? * 因為做if(data)判斷的時候,只要data是非空,就是true值,這樣如果登入失敗返回非空值,就會導致認為登入成功 */ if(data=="success") { location.href = baseURL + ‘/indexAction_index.action‘; } else { $.messager.alert(‘登入失敗!‘, ‘使用者名稱或密碼錯誤!‘, ‘warning‘, function () { $(‘#password‘).select(); }); } } });
struts2之json外掛程式