接收页面通过ajax提交的json格式的数据,做处理思路
1.将页面取到的数据转换成json格式数据
2.将json数据转成json字符串对象
3.action有对应属性(json字符串+字符串反序列化后)接收页面传过来的参数。Ajax提交的json字符串当成String接收
4.接收了json字符串,把json字符串解析获取信息或放序列化成java对象
5.获取json信息dosomething
1.action中将java对象转换成json字符串
2.struts.xml中定义返回类型为json
3.页面接收json字符串
4.将json字符串转换成java对象
JS<------->JSON<------->JAVA
页面JSON转换API:(json.js)
JSON.parse(strJSON)-是用来转化JSON字符串为JavaScript对象的、
JSON.stringify(objJSON) –用来转化JavaScript对象为一个JSON对象的。
java代码中JSON转换API:(JSON-lib包:用于把bean,map和XML转换成JSON并能够把JSON转回成bean和DynaBean;org.apache.commons(3.2以上版本) ;org.apache.oro ;net.sf.ezmorph(ezmorph-1.0.4.jar) )
JSONObject.fromObject(q2); -将java对象转换成JSON对象
JSONArray json = JSONArray.fromObject(list); -将java对象集合转换成JSON数组对象
JSONObject.fromString(json); -将JSON字符串转换成
页面
页面发送数据
一.将收集页面数据组装成js对象(因为JSON对象和JS对象的数据格式一样)
var name= $("#name").attr("value");
var pwd = $("#password").attr("value");
var User = {"name":name,"password":pwd};
二.将JS对象转变成JSON字符串对象
var strUser = JSON.stringify(User);
三.发送JSON字符串 对象
方法1:Ajax发送、接收JSON对象数据
function loadAuotCityList() {
$.ajax({
type: "POST", //post请求
url: "index.action", //请求action的URL
dataType:"json",//返回类型
success: function(result){ //回调函数
if(result.success) {
apdata = eval(result.data);
} else {
alert("ERROR:" + result.data);
}
}
});
}
方法2:Jquery发送、接收JSON对象数据
$.post('<c:url value="/index.action"></c:url>',
{json: strUser},
function(data){
alert(data);
}
);
方法3:
$.post("showQuestions?type="+type,null,callbackShowQuestions,"json");
这时在回调函数的参数data获得的就是json转换后的js对象数组,以下标方式便可访问数组里的相应对象信息。
页面获取数据:
方法一:使用Jquery 框架获取json数据
1. 获取JSON对象数据
var json_data = $.getJSON("xxx.action",function(data){
for(var i = 0;i < data.length;i++){
var id = data[i].id;
var name =data[i].name;
}
});
2.将JSON对象转换成JS对象
var data = $.parseJSON(json_data);
方法二:使用json数据转换工具
Var employees=responseText.parseJSON(); //将JSON字符串解析成对象
For(var i=0; I < employees.length; i++){
Var name=employees[i].name;
}
action处理
public class JsonSubmitAction {
一:Action接收json数据
private String json; //该属性接收页面提交过来名称叫json的json字符串对象
private boolean ok; //自定义的属性(页面验证时,可将此属性返回给页面做判断)
public String getJson() {
return json;
}
public void setJson(String json) {
this.json = json;
}
public boolean isOk() {
return ok;
}
public void setOk(boolean ok) {
this.ok = ok;
}
public void execute() throws Exception {
方法一:使用json数据转换工具
//json 反序列化,User属性对应json数据参数
User user = JSON.parseObject(json, User.class);
System.out.println("username:" + user.getName() + " pwd:" + user.getPassword());
方法二:
User stu = (User) JSONObject.toBean(json, User.class);
//获取json信息dosomething
if (user.getPassword().equals("123456")) {
ok = true;//可以使用
} else {
ok = false;//不可使用
}
二:Action输出json数据 (action中数据直接拼写成一个json数据的string.....返回即可)
方法一:将数据通过字符串拼接转换成JSON格式的字符串,返回
将list遍历然后拼接:
DAO dao = new DAO();
List list= dao.findAll();
StringBuffer sb=new StringBuffer();
sb.append("[");
for(Object obj:list){
User user=(User) obj;
sb.append("{").append("title").append(":'").append(dto.getTitle()).append("',")
.append("chr_id").append(":").append(dto.getChr_id()).append(",")
.append("images").append(":'").append(dto.getImage()).append("'},");
}
sb.deleteCharAt(sb.length()-1);
sb.append("]");
Return sb;
方法二:使用JSON数据转换工具(java对象转换成json字符串输出)
调用JSONObject.fromObject方法转换(要下2个包。。)
List list = new ArrayList();
Map map = new HashMap();
map.put("id",100);
map.put("name",100);
list.add(map);
out.print(JSONObject.fromObject(list).toString());
JSONObject jsonStu = JSONObject.fromObject(student);
System.out.println(jsonStu.toString());
return "success";
}
}
Struts.xml:
再在struts2的配置文件配置一个返回json数据的类型.
<action name="index" class=" action.user.IndexAction">
<result name="success" type="json">
<param name="root">ok </param>
</result>
</action>
其中<result>中一定要将type规定为json,同时加入<param>组件,规定传递的为ok属性,
没有加入<param>在部署该应用时会报警告no default parameter defined for result of type json(没有为json响应类型定义默认的参数)此时客户端接收到的就不仅仅是ok属性而是所有action中的属性,在客户端alert返回的数据会显示object,但是加入<param name=”root”>ok</param>返回的数据中就只有ok,alert时显示的内容就是true或者false,这里需要注意的是<param name=”root”>ok</param>中name=”root”是固定的写法。