错误信息:出现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)注解。
分享到:
相关推荐
在这个实例中,“整合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文档遍历、事件处理...