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();
});
}
}
});