package com.ly.action;import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;import org.apache.struts2.ServletActionContext;import net.sf.json.JSONArray;import com.ly.beans.ExtUser;
import com.ly.commons.ListRange;
import com.opensymphony.xwork2.ActionSupport;public class ExtJsonTest extends ActionSupport {
private int mid;
private String message;
private int result;
public int getMid() {
return mid;
}
public void setMid(int mid) {
this.mid = mid;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
private List<ExtUser> dataArr;
public int getResult() {
return result;
}
public void setResult(int result) {
this.result = result;
}
public List<ExtUser> getDataArr() {
return dataArr;
}
public void setDataArr(List<ExtUser> dataArr) {
this.dataArr = dataArr;
}
public String toExtJsonData(){
ListRange<ExtUser> userlist = new ListRange<ExtUser>();
ExtUser eu1 = new ExtUser(1,"ly","程序员","男");
ExtUser eu2 = new ExtUser(2,"PYX","公务员","女");
this.dataArr = new ArrayList<ExtUser>();
this.dataArr.add(eu1);
this.dataArr.add(eu2);
userlist.setList(dataArr);
userlist.setTotalSize(dataArr.size());
userlist.setMessage(message);
userlist.setSuccess(true);
String json = JSONArray.fromObject(userlist).toString();
System.out.println(mid+"==================");
System.out.println(message+"==================");
System.out.println(json);
try {
ServletActionContext.getResponse().setContentType("text/javascript;charset=UTF-8");
PrintWriter out = ServletActionContext.getResponse().getWriter();
out.print(json);
} catch (IOException e) {
e.printStackTrace();
}
return SUCCESS;
}
}
=================================================================================================
前台
var myRecord = new Ext.data.Record.create(
[
{name:'name'},
{name:'job',mapping:'ocupation'},
{name:'sex',mapping:'gender'} ]
);
var myDataStore = new Ext.data.Store(
{
proxy:new Ext.data.HttpProxy({url : "jsontoext.action"}),
reader:new Ext.data.JsonReader({
totalProperty:"totalSize", root:"list"
},
myRecord )
}
);
myDataStore.load();
Ext.Msg.alert("总记录:"+myDataStore.getCount());
这里显示的记录数为0;
还有后台可以打印出:[{"message":"","list":[{"id":1,"ocupation":"程序员","name":"罗毅","gender":"男"},{"id":2,"ocupation":"公务员","name":"PYX","gender":"女"}],"totalSize":2,"success":true}]
这条json数据。但是不知道传到前台去没有
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;import org.apache.struts2.ServletActionContext;import net.sf.json.JSONArray;import com.ly.beans.ExtUser;
import com.ly.commons.ListRange;
import com.opensymphony.xwork2.ActionSupport;public class ExtJsonTest extends ActionSupport {
private int mid;
private String message;
private int result;
public int getMid() {
return mid;
}
public void setMid(int mid) {
this.mid = mid;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
private List<ExtUser> dataArr;
public int getResult() {
return result;
}
public void setResult(int result) {
this.result = result;
}
public List<ExtUser> getDataArr() {
return dataArr;
}
public void setDataArr(List<ExtUser> dataArr) {
this.dataArr = dataArr;
}
public String toExtJsonData(){
ListRange<ExtUser> userlist = new ListRange<ExtUser>();
ExtUser eu1 = new ExtUser(1,"ly","程序员","男");
ExtUser eu2 = new ExtUser(2,"PYX","公务员","女");
this.dataArr = new ArrayList<ExtUser>();
this.dataArr.add(eu1);
this.dataArr.add(eu2);
userlist.setList(dataArr);
userlist.setTotalSize(dataArr.size());
userlist.setMessage(message);
userlist.setSuccess(true);
String json = JSONArray.fromObject(userlist).toString();
System.out.println(mid+"==================");
System.out.println(message+"==================");
System.out.println(json);
try {
ServletActionContext.getResponse().setContentType("text/javascript;charset=UTF-8");
PrintWriter out = ServletActionContext.getResponse().getWriter();
out.print(json);
} catch (IOException e) {
e.printStackTrace();
}
return SUCCESS;
}
}
=================================================================================================
前台
var myRecord = new Ext.data.Record.create(
[
{name:'name'},
{name:'job',mapping:'ocupation'},
{name:'sex',mapping:'gender'} ]
);
var myDataStore = new Ext.data.Store(
{
proxy:new Ext.data.HttpProxy({url : "jsontoext.action"}),
reader:new Ext.data.JsonReader({
totalProperty:"totalSize", root:"list"
},
myRecord )
}
);
myDataStore.load();
Ext.Msg.alert("总记录:"+myDataStore.getCount());
这里显示的记录数为0;
还有后台可以打印出:[{"message":"","list":[{"id":1,"ocupation":"程序员","name":"罗毅","gender":"男"},{"id":2,"ocupation":"公务员","name":"PYX","gender":"女"}],"totalSize":2,"success":true}]
这条json数据。但是不知道传到前台去没有
2 不需要最外层的[]. 直接用对象 {....}
3 定义的record是 name job sex三个字段,而 list里的对象是 id, ocupation, name, gender四个。字段名称不对应。
var myRecord = new Ext.data.Record.create(
[
{name:'myid', type:'int'},
{name:'name'},
{name:'job',mapping:'ocupation'},
{name:'sex',mapping:'gender'}
]
);
var myDataStore = new Ext.data.Store(
{
proxy:new Ext.data.HttpProxy({url : "jsontoext.action"}),
reader:new Ext.data.JsonReader(
{
totalProperty:"totalSize",
root:"list",
id:'myid',
successProperty:'success'
},
myRecord
)
}
);
myDataStore.load();
//Ext.Msg.alert("总记录:"+myDataStore.getCount());
前台总是显示0.这是为什么。(从后台的json数据在火狐firedub中已经有显示,但是通过ext显示不出来,估计是解析是出问题了。但是我自己看前台代码貌似没问题呀)后台的json数据 是这样的:
[{"message":"yeye","list":[{"ocupation":"程序员","myid":1,"name":"ly","gender":"男"},{"ocupation":"公务员","myid":2,"name":"PYX","gender":"女"},{"ocupation":"工人","myid":3,"name":"tom","gender":"男"}],"totalSize":3,"success":true}]