struts使用JSON(解决JsonArray终止且不报错问题)
2013-03-10 20:25
369 查看
在引入json-lib2.1.jar之后,可以很方便在struts配置文件中使用json-default来使Action中的成员变量(有getter&setter)自动获得前端传来的JSON参数,并且前端可以在action返回中获得这些变量的值,当然,前提是这些成员变量与在页面中的变量名称一致且他们都是可序列化的。
我的struts中的配置如下:
如果有的变量不用序列化,可以在该变量上用@JSON(serialize=false)注解。
本来是用这种方式可以很顺利地传递Json参数,但在使用JsonArray时,发现方法抛异常且无异常信息,执行到此终断。查了一下这个问题,根源在于缺包,struts2.1.6要完整使用Json的所有功能,总共需要引入7个包:
commons-beanutils-1.7.0.jar
commons-lang-2.1.jar
commons-collections-3.1.jar
ezmorph-1.0.3.jar
json-lib-2.1.jar
jsonplugin-0.33.jar
包引入多了或少了都不行,多了会冲突。我一开始有引入struts2-json-plugin-2.1.8.1.jar,后来发现它和jsonplugin-0.33.jar有冲突。还有一点,Json的包最好不要以Library的形式引入,会出错。最好直接放在web-inf/lib中。
使用JsonArray生成json类型数据可以通过PrintWriter 向前台输出,我们在需要改变json字段的格式时可以使用(EXT的展示会用到)。这种情况不能用extends="json-default"的形式调用action,只能用原来的extends="struts-default"。
贴一个我用的BaseAction,大多数Json功能都有了,继承即可,注意在用到这些方法时要用struts-default形式映射action:
我的struts中的配置如下:
<package name="jsonpack" extends="json-default" namespace="/"> <action name="*_*" class="{1}" method="{2}"> <result name="success" type="json"/> </action> </package>
如果有的变量不用序列化,可以在该变量上用@JSON(serialize=false)注解。
本来是用这种方式可以很顺利地传递Json参数,但在使用JsonArray时,发现方法抛异常且无异常信息,执行到此终断。查了一下这个问题,根源在于缺包,struts2.1.6要完整使用Json的所有功能,总共需要引入7个包:
commons-beanutils-1.7.0.jar
commons-lang-2.1.jar
commons-collections-3.1.jar
ezmorph-1.0.3.jar
json-lib-2.1.jar
jsonplugin-0.33.jar
包引入多了或少了都不行,多了会冲突。我一开始有引入struts2-json-plugin-2.1.8.1.jar,后来发现它和jsonplugin-0.33.jar有冲突。还有一点,Json的包最好不要以Library的形式引入,会出错。最好直接放在web-inf/lib中。
使用JsonArray生成json类型数据可以通过PrintWriter 向前台输出,我们在需要改变json字段的格式时可以使用(EXT的展示会用到)。这种情况不能用extends="json-default"的形式调用action,只能用原来的extends="struts-default"。
PrintWriter out = getResponse().getWriter(); out.print(str);//向前台输出json串strstruts同时配置两种模式:
<struts> <!-- 设置Struts2应用是否处于开发模式,通常在开发调试阶段设为true,正式上线后可设为false --> <constant name="struts.devMode" value="true" /> <!-- 设置Web应用的默认编码集为UTF-8 --> <constant name="struts.i18n.encoding" value="UTF-8"/> <package name="registration" extends="struts-default" namespace="/"> <action name="contact_listPublicCont" class="contact" method="listPublicCont"> </action> <action name="contact_search" class="contact" method="search"> </action> <action name="user_login" class="user" method="login"> <result name="success" type="redirect">/jsp/main/index.jsp</result> </action> </package> <package name="jsonpack" extends="json-default" namespace="/"> <action name="*_*" class="{1}" method="{2}"> <result name="success" type="json"/> </action> </package> </struts>
贴一个我用的BaseAction,大多数Json功能都有了,继承即可,注意在用到这些方法时要用struts-default形式映射action:
package com.ksms.action; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import net.sf.json.JSONArray; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; @SuppressWarnings("serial") public class BaseAction extends ActionSupport{ /** * 获得request * * @return */ public HttpServletRequest getRequest() { return ServletActionContext.getRequest(); } /** * 获得response * * @return */ public HttpServletResponse getResponse() { return ServletActionContext.getResponse(); } /** * 获得session * * @return */ public HttpSession getSession() { return getRequest().getSession(); } public void outJsonString(String str) { getResponse().setContentType("text/json;charset=UTF-8"); outString(str); } public void outString(String str) { try { PrintWriter out = getResponse().getWriter(); out.print(str); } catch (IOException e) { e.printStackTrace(); } } @SuppressWarnings("unchecked") public void outListString(List list) { try { JSONArray jsonArray = new JSONArray(); if (list.size() > 0) { jsonArray = JSONArray.fromObject(list); } String jsonString = "{total:" + list.size() + ",root:" + jsonArray.toString() + "}"; outString(jsonString); } catch (Exception e) { e.printStackTrace(); } } public void outError() { outString("{success:false,errors:'操作失败!'}"); } }
相关文章推荐
- 关于使用ajax请求servletList转换Json抛的异常There is a cycle in the hierarchy!暨将List转换为JSONArray问题解决!
- 在使用Gson的toJson()方法转为json字符串的时候无法显示中文和符号的问题(已解决)
- 关于使用httpclient传输json信息并解决中文乱码问题
- 关于在struts2.0中应用json产生类型访问异常问题的解决
- struts多模块开发中使用SwitchAction出错的问题解决
- 使用PrintWriter对象导致Struts国际化化失败问题的解决及分析
- Springboot使用FastJson后,接口返回中文乱码的问题解决(两种解决方式)
- 关于在struts 框架中使用Filter过滤器解决汉字编码问题
- struts json 类型异常返回到js弹框问题解决办法
- 在Struts中使用AjaxTags解决连动问题
- SSM框架:解决后台传数据到前台中文乱码问题,使用@ResponseBody返回json 中文乱码
- 解决springmvc使用ResponseBody注解返回json中文乱码问题
- 解决在IE8中无法使用原生JSON的问题
- 在线聊天项目1.4版 使用Gson方法解析Json字符串以便重构request和response的各种请求和响应 解决聊天不畅问题 Gson包下载地址
- struts2.1.6 s:datetimepicker 标签不能使用的问题解决
- 解决php使用json_encode在前端返回字符串的问题
- 解决json插入mysql后再读出使用json_decode()返回null问题
- SpringMVC使用注解@ResponseBody返回json以及中文乱码问题解决
- springMVC使用@RequestBody接收Json的过程,解决415的问题ss
- 使用struts的上传组件的上传大小问题——已解决!