一、引入json插件包html
<!-- 引入struts2的json插件 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-json-plugin</artifactId> <version>${struts.version}</version> </dependency>
二、配置xml,extends="json-default",<result name="success" type="json"></result>java
<?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>
三、Action中使用ajax
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; } }
四、json相關:apache
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; }
五、json插件原理,查看struts2-json-plugin.jar根目錄下的struts-plugin.xml文件,發現json-default自己繼承自struts-default,而且自定義了類型json: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>
六、訪問頁面:post
$.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(); }); } } });