遇到的问题:不知道如何接收json数据,不知道如何将json数据在前台转成键值对的形式,及不知道如何在用流接收到json数据后赋值给bean;
$("#form").serialize()可以获取到序列化的表单值字符串
通过$("#form").serializeArray()输出以数组形式序列化表单值JSON.stringify($("#form").serializeObject()); 就可以得到Json内容噜。
contentType: "application/json; charset=utf-8",
这个类型是传json格式数据到后台
接受时用流来接收
contentType: "application/x-www-form-urlencoded",
这个类型是传键值对(a=b)格式数据到后台
用request.getParameter()方法来接收
$.param(item) jQuery方法 把json的js对象转为"a=b&c=d"这种字符串的形式
用流来接收到json数据及如何赋值给bean
// StringBuffer sb = new StringBuffer();
// ServletInputStream in = request.getInputStream();
// BufferedReader br = new BufferedReader(new InputStreamReader(in, "utf-8"));
// String s = "";
// while((s=br.readLine())!=null){
// sb.append(s);
// }
username= new String(username.getBytes("iso-8859-1"),"utf-8");
// String str = sb.toString();
// br.close();
// String str1 = new String(str.getBytes("iso-8859-1"),"utf-8");
// System.out.println("AbstractServlet requestPOSTData str :" + str);
// System.out.println("AbstractServlet requestPOSTData str1 :" + str1);
// try {
// JSONObject map = new JSONObject();
// map = JSONObject.fromObject(str);
//
// ZnProject project = (ZnProject)JSONObject.toBean(map, ZnProject.class);
// project.setId(Integer.valueOf((String) map.get("id")));
//
// System.out.println(project);
projectManageService.update(model);
// } catch (Exception e) {
// System.out.println(e.toString());
// }
我认为的一种标准写法:
1,首先引入struts2-json-plugin包
2,定义一个拦截器
<package name="json" namespace="/gry" extends=" struts-default, json-default">
<interceptors>
<interceptor-stack name="myInterceptorStack">
<interceptor-ref name="json">
<param name="contentType">application/json</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<action name="main" class="com.zhuineng.test.TestAction" method="{1}">
<interceptor-ref name="myInterceptorStack"/>
<result type="json" />
</action>
</package>
3,jsp页面写正常的ajax
注意:data: JSON.stringify(data) data为js对象,传递的格式大致为:
- var data = {
- name: "john",
- age: 30,
- height: 1.78,
- scores: [85, 90],
- score_array: [85, 90],
- array: [85,"Struts2"],
- books_map: {
- "struts2": 85
- },
- book: {
- "name": "Struts2",
- "price": 85.3,
- "sellers":[
- "SA",
- "SB"
- ]
- }
- };
4,action接收的时候在action里边定义属性,提供set get方法,如果是类 需要先new出来