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(); }); } } });
时间: 2024-11-02 12:53:55