ssh与ajax结合之json异常:org.apache.struts2.json.JSONException
来源:互联网 发布:windows date 编辑:程序博客网 时间:2024/06/05 08:24
在ssh和ajax结合实现异步传输时,经常会出现的一个问题是,json格式的数据从后台传递到页面后无法解析,下面的data即是回调函数中参数,在页面断点后会看到data接收到的是下面一堆数据,其实是异常信息。
------------------------------------------------------------------------------------------
data
"Struts
- Positioned
Update .not supported - java.lang.reflect.InvocationTargetExceptio
n - org.apache.struts2.json.JSONException:
java.lang.reflect.InvocationTargetExceptio n
- org.apache.struts2.json.JSONException:
org.apache.struts2.json.JSONException:java.lang.reflect.InvocationTargetExceptio - org.apache.struts2.json.JSONException:
org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetExceptio n
tacktraces
org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException
org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:243)
org.apache.struts2.json.JSONWriter.process(JSONWriter.java:165)
org.apache.struts2.json.JSONWriter.value(JSONWriter.java:131)
org.apache.struts2.json.JSONWriter.write(JSONWriter.java:99)
org.apache.struts2.json.JSONUtil.serialize(JSONUtil.java:112)
org.apache.struts2.json.JSONResult.execute(JSONResult.java:198) com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:362) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:266) com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Unknown Source)
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
那么,为什么会出现这个异常呢?
究其原因,竟然是Hibernate的懒加载引起的。一定是你传递的数据中有引用类型的数据采用了懒加载机制。
比如:我要从Action中向前台传送一个Collection,通过get方法
public
而其中Menuitem类型的数据结构是:
public
//getter(),setter()方法
}
在映射文件Menuitem.hbm.xml中users属性的配置如下:
未设置lazy="false",则默认采用懒加载模式。
当中间表user_menuitem中没有数据时,ok,不会牵涉到use表,也就不存在懒加载问题,运行一切正常。
但是当user_menuitem表中有数据,且数据与所传送的Menuitem对象有关时,就会有问题了
因为懒加载,这样在Action中获取的Menuitem对象中的users属性中的set集合中会存在user对象的引用,但是user的信息其实并未加载,
只有当用到时,容器才再次发出sql请求进行加载,但是在json插件对menuitemList进行处理以转换成json格式时,Hibernate
有人可能会有疑问,我在web.xml中配置了OpenSessionInViewFilter过滤器,为什么Session还会关闭呢!?
这个疑问问的好!!我也不知何故,在网上也没找到相关的解释,不知是不是ajax的XMLHttpRequest的问题,
总之,在struts2与ajax结合的过程中,OpenSessionInView模式不起作用了!请知道的朋友不吝赐教!
好!既然知道了问题的原因,那么解决方法就很明了了!
方法一:设置lazy="false",即对user不采用懒加载。如
方法二:忽略set
现在问题应该已经解决了!!
下面关于struts2和ajax的结合还有几点建议:
1、在页面用不到的数据最好不要传到前台(这也是之所以推荐第二种方法的原因,传的数据越大,效率越低不是吗!)
2、不是向前台传数据的方法最好不要以get开头,json插件会把所有get开头的方法当做属性,转为json格式数据
3、如果方法必须以get开头,然而又不是为了转为json格式,那么可以在该方法上加注解:@JSON(serialize=false)
4、需要传到前台的数据,一定要在dao中加载完毕,不能使用懒加载模式。
- ssh与ajax结合之json异常:org.apache.struts2.json.JSONException
- ssh与ajax结合之json异常:org.apache.struts2.json.JSONException
- ssh与ajax结合之json异常:org.apache.struts2.json.JSONException
- ssh与ajax结合之json异常:org.apache.struts2.json.JSONException
- ssh与ajax结合之json异常:org.apache.struts2.json.JSONException
- ssh与ajax结合之json异常:org.apache.struts2.json.JSONException
- ssh与ajax结合之json异常:org.apache.struts2.json.JSONException
- ssh与ajax结合之json异常:org.apache.struts2.json.JSONException
- ssh与ajax结合之json异常:org.apache.struts2.json.JSONException
- ssh2与ajax结合之返回json数据异常:org.apache.struts2.json.JSONException
- SSH+ajax 发生异常org.apache.struts2.json.JSONException: org.hibernate.LazyInitializationException
- 1.ssh中使用ajax发生的异常:org.apache.struts2.json.JSONException
- 解决org.apache.struts2.json.JSONException异常
- 异常处理: org.apache.struts2.json.JSONException:
- 关于org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException异常的解决
- org.apache.struts2.json.JSONException:org.apache.struts2.json.JSONException异常
- org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException
- org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException
- 1.2java开发环境搭建
- Maven 分模块、分工程管理
- shuffle数据(permutation)
- html,js实现文本横向滚动(跑马灯)效果
- 剑指offer 编程题(5):两个栈实现队列,两个队列实现栈
- ssh与ajax结合之json异常:org.apache.struts2.json.JSONException
- 装饰者模式
- 错误记录--更改tomcat端口号方法,Several ports (8005, 8080, 8009)
- Selenium2Library(RF)火狐浏览器打不开问题汇总
- rabbitmq整合spring实现rpc技术调用
- 认识JavaScript中的this
- Backbone入门
- 解析WINDOWS中的DLL文件---经典DLL解读
- A child container failed during异常解决