- 浏览: 893289 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (687)
- java (127)
- servlet (38)
- struts (16)
- spring (22)
- hibernate (40)
- javascript (58)
- jquery (18)
- tomcat (51)
- 设计模式 (6)
- EJB (13)
- jsp (3)
- oracle (29)
- RUP (2)
- ajax (3)
- java内存管理 (4)
- java线程 (12)
- socket (13)
- path (5)
- XML (10)
- swing (2)
- UML (1)
- JBPM (2)
- 开发笔记 (45)
- Note参考 (15)
- JAXB (4)
- Quartz (2)
- 乱码 (2)
- CSS (2)
- Exception (4)
- Tools (7)
- sqlserver (3)
- DWR (7)
- Struts2 (47)
- WebService (2)
- 问题解决收藏 (7)
- JBOSS (7)
- cache (10)
- easyUI (19)
- jQuery Plugin (11)
- FreeMarker (6)
- Eclipse (2)
- Compass (2)
- JPA (1)
- WebLogic (1)
- powerdesigner (1)
- mybatis (1)
最新评论
-
bugyun:
受教了,谢谢
java 正则表达式 过滤html标签 -
xiongxingxing_123:
学习了,感谢了
java 正则表达式 过滤html标签 -
wanmeinange:
那如果无状态的。对同一个任务并发控制怎么做?比如继承Quart ...
quartz中参数misfireThreshold的详解 -
fanjieshanghai:
...
XPath 元素及属性查找 -
tianhandigeng:
还是没明白
quartz中参数misfireThreshold的详解
错误信息:出现java.lang.NoSuchMethodException setUser([LJava.lang.String;)异常
struts2中的UserAction:
1 public class UserAction{
2 private User user;
3 private String name;
4 public void setName(String name){
5 this.name = name;
6 }
7 public String getName(){
8 return name;
9 }
10 public User getUser() {
11 return user;
12 }
13
14
15 public void setUser(User user) {
16 this.user = user;
17 }
18
19 public String execute(){
20 System.println(user.getUsername);
21 }
22
23 }
24 User就两个属性:username/password.
这个是开始的struts.xml中的代码: <package name="json" extends="json-default">
<action name="save" class="com.aaron.example.action.UserAction">
<result type="json"></result>
</action>
</package> 这个是jQuery代码: $(function(){
var json = {"user":{"username":"zhangsan","password":"123"}};//方法1
//json = {"name":"zhanglong"};// 方法2
//json = {"user.username":"zhangsan","user.password":123};//方法3
}); 用方法1会出项上述错误,方法2和方法3都可行。
原因:
方法2成功的原因是{"name":"zhanglong"}传递的是一个名值对,就像是request的parameter.
方法3成功也是一样的,struts2的OGNL会识别user.username,并把它对应的值"zhangsan"存放到user的username属性上
方法1失败是因为传的名值对是:"user":"{'username':'zhangsan','password','123'}",这样struts就会你要将"{'username':'zhangsan','password','123'}"这个字符串赋值给user对象,它就会调用setUser(String user)方法(或者是setUser(String[] user)),由于UserAction中没有这个方法,所以会报错。
解决方法:
根据jsonplugin官方的文档,页面传入的请求的content-type要是application/json,否则json的interceptor不会帮你将json转换为java对象,这里他忘了说明一点,jsonplugin中只是定义了json的interceptor,并没有将其放入到package的拦截器栈中,还需要我们自己放入自己的package中。如下:
1 <interceptors>
2 <interceptor-stack name="myDefaultStack">
3 <interceptor-ref name="json"/>
4 <interceptor-ref name="defaultStack"/>
5 </interceptor-stack>
6 </interceptors>
7
8 <default-interceptor-ref name="myDefaultStack"/>还要设置jquery的ajax请求的content-type和传递类型为"POST":
1 $.ajax({
2 type:"POST",
3 data:jsonText,
4 url:"save.action?number=" + Math.random(),
5 contentType:"application/json"
6 });其中jsonText如下: 1 var jsonText = "{'user':{
2 'username':'zhangsan',
3 'password':'123'
4 }
5 }"注意,整个jsonText是个字符串,其中的名值对的名要用''包起来,否则会报异常,指出json格式不对。
只有这样做了后,json拦截器才会帮你做转换。
还有,如果UserAction中有个userService的话,需要设置action的result的param:
1 <result type="json">
2 <param name="excludeProperties">
3 userService
4 </param>
5 </result>这样就不会将userService进行序列化了,或者可以将action中的getUserService()方法去掉。
如果user对象是从hibernate获取的,可能得到的是一个代理对象,对其进行json序列化时会出错。解决办法是为User对象加上@Proxy(lazy=false)注解。
posted on 2010-06-29 15:10 Aaronlong31 阅读(1829) 评论(4) 编辑 收藏
Feedback
# re: 关于用jquery传递json给struts2中的复杂对象的方法 2010-06-29 23:29 freeman1984
有这样做的必要吗,直接序列化一个对象成 对象.属性传过去 struts的ognl不就解决了,复杂了这样。。。。 回复 更多评论
# re: 关于用jquery传递json给struts2中的复杂对象的方法 2010-06-30 10:17 Aaronlong31
@freeman1984
我之前也是想这么做的,但有的对象很复杂,里面还嵌套了其他对象,还有List对象,若是用对象.属性的话就会很复杂,jsonText看着很庞大。
这只是我的观点,欢迎讨论。
回复 更多评论
# re: 关于用jquery传递json给struts2中的复杂对象的方法 2010-07-05 23:21 来如风
一楼的办法好,其实不管多复杂,你都要传递的 回复 更多评论
# re: 关于用jquery传递json给struts2中的复杂对象的方法 2010-07-06 16:46 tipx
其它只要做一个尝试解析json对象的方法就可以了。
在$.post前,将{user:{uname:'aa', sex:'f'}}解析成{'user.uname':'aa', 'user.sex':'f'} 回复 更多评论
发表评论
-
ognl表达式
2011-07-07 00:36 1301OGNL是Object Graphic Navigation ... -
在Struts 2_0中实现表单数据校验
2011-07-07 00:02 1147转换与校验(Conversion & Validati ... -
简单的struts2输入校验框架
2011-05-13 23:43 10901.输入页面login.jsp: <%@ page ... -
struts2在学习(十二)--表单验证的两种方式
2011-05-13 23:13 960第四个示例:注解方式校验器---用户注册页面user2_reg ... -
struts2在学习(十一)--表单验证的两种方式
2011-05-13 23:09 909第二个示例:XML配置式校验器---登录和注册页面user_l ... -
struts2在学习(十)--表单验证的两种方式
2011-05-13 22:56 11661. Struts2中的输入校验2. 编码方式校验 1) A ... -
struts2采用convention-plugin实现零配置
2011-05-13 21:58 1120最近开始关注struts2的新特性,从这个版本开始,Strut ... -
基于SSH2框架Struts2拦截器的登录验证实现
2011-04-01 22:00 2293通过之前的Struts2.1.6+Spring2.5.6+H ... -
通过ActionContext类访问Servlet对象
2011-04-01 21:40 1924ActionContext类位于com.opensympho ... -
webwork 之销毁session
2011-04-01 17:35 1773销毁的意思?不是清空 ... -
Struts2 Convention Plugin(三)
2011-03-18 01:26 1206Annotation 参考Convention使用某些注解语句 ... -
Struts2 Convention Plugin(二)
2011-03-18 01:25 1155Results and result codesStruts ... -
Struts2 Convention Plugin(一)
2011-03-18 01:25 1105Introduction从struts2.1版本开始,Conv ... -
struts2页面中的标签调用类的方法
2011-03-15 16:33 1623<s:set name="str" ... -
Apache Struts 2.2.1 GA版发布
2011-03-14 17:14 1339昨日,Apache软件基金会发布了Struts 2.2.1 G ... -
spring2 +hibernate 3 + struts 配置
2011-03-14 15:15 12191. web.xml 1. <?xml versi ... -
Struts2 中action之间的跳转
2011-03-14 12:32 1258转载于http://zhou568xiao.iteye.com ... -
Struts2 的Result Type
2011-03-13 16:35 1050http://www.blogjava.net/duanzhi ... -
struts2 跳转类型 result type=chain、dispatcher、redirect(redirect-action)
2011-03-13 16:32 1627dispatcher 为默认跳转类型,用于返回一个视图资源(如 ... -
struts2防止重复提交
2011-03-10 23:07 1296struts2的防止重复提交 也使用到了 token (令牌机 ...
相关推荐
在这个实例中,“整合jquery+json+struts2异步提交”是一个典型的前端与后端交互的示例,利用了jQuery的Ajax功能和Struts2框架处理JSON数据。下面我们将详细探讨这些技术及其相互配合的工作原理。 **jQuery** 是一...
在IT行业中,jQuery、AJAX、JSON以及Struts2是四个非常重要的技术,它们在Web开发领域中扮演着核心角色。下面将详细解释这些技术及其相互间的集成。 **jQuery** 是一个快速、简洁的JavaScript库,它简化了HTML文档...
本文将深入探讨如何使用jQuery的AJAX方法发送JSON对象数组到Struts2的Action,并在后端进行处理。 首先,我们了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于...
总结来说,"jQuery+json异步实现JSP和struts2之间的数据传递"是Web开发中的常见实践,它利用jQuery的Ajax功能与Struts2的JSON支持,实现了前后端的数据同步,简化了开发流程,提高了应用程序的响应速度和用户体验。...
在本场景中,我们将探讨如何使用AJAX来传递JSON数组,并在Struts2的Action中接收和处理这些数据。 首先,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析...
总结来说,JQuery通过`$.post`方法发起Ajax请求,Struts2框架通过配置和Action处理请求,并利用JSON插件将Java对象转换为JSON格式,最后将结果返回给客户端。客户端的回调函数接收到JSON数据后,可以解析并更新页面...
在Struts2中集成jQuery和JSON,可以极大地提升用户界面的响应速度和用户体验。 本实例"Struts2_jquery_json1.0.zip"显然演示了如何在Struts2框架中利用jQuery和JSON进行数据交换。Struts2的JSON插件允许我们轻松地...
Action类可能包含一个方法,该方法返回一个封装了数据的Java对象,并且需要在Struts2的配置文件中声明这个方法应该返回JSON类型的结果。 接着,我们需要配置Struts2的JSON插件,以支持JSON输出。这通常涉及在struts...
至此,你已经掌握了如何使用Struts2的JSON插件进行数据传递的基本步骤。然而,Struts2 JSON插件还提供了许多高级特性,如自定义JSON序列化策略、处理复杂类型、支持国际化等。在实际开发中,你可以根据项目需求灵活...
Struts2JQueryJson是一个基于Struts2框架与jQuery库,结合JSON(JavaScript Object Notation)数据格式,实现Ajax异步加载对象数据的技术方案。在Web应用开发中,这种技术可以提升用户体验,因为它允许页面部分内容...
在Struts2中,我们可以使用Struts2的JSON插件将Action的返回值转换为JSON格式,方便前端JavaScript进行处理。 最后,JQuery是一个强大的JavaScript库,它简化了DOM操作、事件处理、动画制作以及Ajax交互。在本例中...
在Struts2中,开发者可以通过Action类定义业务逻辑,并通过配置文件来指定Action与URL的映射关系。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成...
在"Struts2+jQuery+JSON"的组合中,Struts2作为后端框架负责处理业务逻辑和数据管理,它通过JSON格式返回数据给前端。jQuery在前端负责接收这些JSON数据,然后使用其强大的DOM操作功能来更新页面内容,实现无刷新的...
博客链接中提到的内容可能详细解释了如何配置Struts2的Action、Result以及如何在JSP页面中使用jQuery与服务器进行交互,同时展示了如何处理和返回JSON数据。这个小例子可以帮助初学者理解这三者如何协同工作,提升...
在Struts2中,可以通过配置Action类的返回类型为"json",使得Action执行后返回JSON对象。JSON数据在Ajax请求和响应中起到关键作用,它可以将登录验证的结果(例如,成功或失败信息、错误消息等)以结构化的方式传递...
在SSH(Struts2、Spring、Hibernate)架构的项目中,使用jQuery与后台进行交互是常见的做法,特别是在处理异步请求时。本示例主要介绍了如何利用jQuery通过JSON与Struts2的Action进行数据交换,从而实现前端与后端的...
在Struts2中,Jquery可以与Ajax结合使用,实现页面的无刷新更新。 Ajax(Asynchronous JavaScript and XML)技术允许前端与后台进行异步通信,无需整个页面刷新,提高了用户体验。在Struts2框架下,我们可以使用...
如果需要返回数据,可以使用JSON对象封装结果,然后使用Struts2的JSON插件将Java对象转换为JSON格式的响应。 4. **JSON响应**:Struts2会将JSON对象写入HTTP响应体,返回给前端。jQuery的Ajax回调函数接收到这个...
通过这个例子,你可以学习到如何在实际项目中结合使用Struts2、JQuery和JSON,包括如何配置Struts2的JSON插件,如何在JQuery中处理JSON数据,以及如何利用JQuery的插件来美化和增强用户界面。同时,理解和掌握JSON的...
在Struts2中,我们可以使用JSON插件来方便地序列化和反序列化Java对象为JSON格式,从而实现在Ajax请求中发送和接收数据。 **3. jQuery库** jQuery是一个高效、简洁的JavaScript库,它简化了HTML文档遍历、事件处理...