- 导入
struts2-json-plugin.jar - 创建
AjaxAction类 , 这里的属性users会存储到ValueStackroot的栈顶
- 当请求
AjaxAction时,该AjaxAction对象被压入栈顶 -
Action中携带的属性名由getXXX()决定,而不是成员变量名决定,但一般设置为相同
public class AjaxAction extends ActionSupport {
List<User> users;
public List<User> getUsers() {
return users;
}
@Override
public String execute() throws Exception {
users = new ArrayList<>();
users.add(new User("张三","1234532"));
users.add(new User("李四","1234532"));
users.add(new User("王五","1234532"));
users.add(new User("ethan","1234532"));
System.out.println("ajax execute");
return SUCCESS;
}
}
- 在
struts.xml中配置 action
<struts>
<package name="ajax" namespace="/" extends="json-default">
<action name="ajax" class="com.example.ajax.AjaxAction">
<result type="json">
<param name="root">users</param>
</result>
</action>
</package>
</struts>
配置详解:
-
package的extends属性值设置为json-default -
result的type属性值 设置为json
配置后,会将valueStack中的 root 栈顶数据变成json。
对于当前程序,栈顶数据即为AjaxAction对象。即最终返回的json数据是AjaxAction对象转换而成的
例: 返回的数据如下 :
{
"users": [{
"username": "张三"
}, {
"username": "李四"
}, {
"username": "王五"
}, {
"username": "ethan"
}],
"otherProperty": "values"
}
如何只想获得AjaxAction中指定的属性users,并将其转换为json返回:
result内部添加配置: <param name="root">users</param>
[{
"username": "张三"
}, {
"username": "李四"
}, {
"username": "王五"
}, {
"username": "ethan"
}]