- 浏览: 719876 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
cuqing:
laogao598599 写道匿名内部类不一定是局部内部类,还 ...
匿名内部类访问外部类中的局部变量必须是final属性 -
laogao598599:
匿名内部类不一定是局部内部类,还可以作为成员变量
匿名内部类访问外部类中的局部变量必须是final属性 -
stand_star:
非常给力!
struts2验证规则配置文件命名方式 -
wenlongsust:
嗯, 将返回值修改为html的确就可以了
EasyUI form ajax submit后,在IE下提示下载内容的解决办法 -
勇往直前wwt:
这样是自动增长,但每次id还得插入,如何只插入其他字段而让id ...
把主键定义为自动增长标识符类型
1、引入包(本文中的包全部引自struts-2.1.8.1\lib):
struts2-json-plugin-2.1.8.1.jar
json-lib-2.1.jar
commons-collections-3.2.jar
commons-beanutils-1.7.0.jar
commons-lang-2.3.jar
commons-logging-1.0.4.jar
ezmorph-1.0.3.jar
这7个包是返回json形式的数据必须的。因为json大量引用了Apache commons的包,所以要加入4个,commons包,除了commons的包外,还需要引入一个 ezmorph的包。最后加入struts2必须的6个包:
struts2-core-2.1.8.1.jar
xwork-core-2.1.6.jar
ognl-2.7.3.jar
freemarker-2.3.15.jar
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
2、后台:
1) Userinfo实体类代码 public class UserInfo implements Serializable {
private int userId;
private String userName;
private String password;
get set方法略
}
2) Action类 public class TestAction extends ActionSupport {
private String message; //使用json返回单个值
private UserInfo userInfo; //使用json返回对象
private List userInfosList; //使用josn返回List对象
get set方法略
/*返回单个值*/
public String returnMsg(){
this.message = "成功返回单个值";
return SUCCESS;
}
/*返回UserInfo对象*/
public String returnUser(){
userInfo = new UserInfo();
userInfo.setUserId(10000);
userInfo.setUserName("刘栋");
userInfo.setPassword("123456");
return SUCCESS;
}
/*返回List对象*/
public String returnList(){
userInfosList = new ArrayList<UserInfo>();
UserInfo u1 = new UserInfo();
u1.setUserId(10000);
u1.setUserName("张三");
u1.setPassword("111111");
UserInfo u2 = new UserInfo();
u2.setUserId(10001);
u2.setUserName("李四");
u2.setPassword("222222");
userInfosList.add(u1);
userInfosList.add(u2);
return SUCCESS;
}
}
3) struts.xml(必须继承json-default、json-default继承自struts-default) <package name="default" namespace="/json" extends="json-default">
<action name="returnMsg" class="com.testAction " method="returnMsg">
<result name="success" type="json">
<param name="root">validate</param>
</result>
</action>
<action name="returnUser "
class="com.testAction " method="returnUser ">
<result name="success" type="json">
<param name="includeProperties">
userInfo\.userId,userInfo\.userName,userInfo\.password
</param>
</result>
</action>
<action name="returnList" class="com.testAction "
method="returnList">
<result name="success" type="json">
<param name="includeProperties">
userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password
</param>
</result>
</action>
</package>
3、前台:
1) 页面引入jquery-1.4.2.js
2) 代码如下: <script language="javascript">
function getMsg(){
$.ajax({
url:'json/returnMsg.action',
type:'post',
dataType:'json',
success:function(data){
$("#result").html(data.message);
}
});
}
function getUser(){
$("# result ").html("");
$.ajax({
url:'json/returnUser.action',
type:'post',
dataType:'json',
success:function(data){
$("#result").append("用户ID:"+data.userInfo.userId+"")
.append("用户名:"+data.userInfo.userName+"")
.append("密码:"+data.userInfo.password+"");
}
});
}
function getUserList(){
$("# result ").html("");
$.ajax({
url:'json/returnList.action',
type:'post',
dataType:'json',
success:function(data){
$.each(data.userInfosList,function(i,value){
$("#result").append("第"+(i+1)+"个用户")
.append("用户名:"+value.userName+"")
.append("密码:"+value.password+"");
}
}
});
}
</script>
<div id="result"></div>
<input type="button" value="获得单个消息" onclick="getMsg()"/>
<input type="button" value="获得用户信息" onclick="getUser()"/>
<input type="button" value="获得用户列表" onclick="getUserList()"/>
4、只要继承extends="json-default",result type设置成json之后,容器会把action的属性自动封装到一个json对象中(json拦截器来做),然后调用ajax的callback方法. 返回json数据
5、includeProperties 参数:输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。
如:输出UserInfo的所有属性及UserInfo的userName属性
<result type="json">
<param name="includeProperties"> userInfo.*,
userInfo \. userName </param>
</result>
6、excludeProperties 参数:输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式,类同includeProperties
7、输出一个JSON List列表
<result name="success" type="json">
<param name="includeProperties">
userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password
</param>
</result>
其中userInfosList是action中的一个List类型的属性,userInfosList \[\d+\]\. userName表示,userInfosList中存储的对象0..end的userName属性(list中存储的对象必须有userName属性)。
8、为什么要用includeProperties或excludeProperties 参数:主要是为了过滤掉接口,pojo的set、list、其它对象等不需要的数据防止循环取其它关联对象或找不到接口。如果不配置,默认是处理action中的所有属性,如果action中有接口注入,json拦截器可能找不到接口而返回不了结果,还有如果action中有一个对象,这个对象与好多对象都有关联,json拦截器会将相关联的所有对象的属性全部转换成json格式,如果其它对象有list、set,其返回结果相当庞大,有可能是死循环而无法返回 。如果不用<param name="includeProperties">或其他方式进行json数据过滤,通过debug你会发现前台返回的json字符串,是把action中的所有属性全部转化成json字符串返回给客户端(包括service接口、pojo所有属性及有关联的pojo。有时候根本返回不了结果,也不报错,后台执行了,但前台执行不到callback function,这主要是因为找不到接口或者关联的pojo太多,造成死循环),一般情况下用的最多的就是root、includeProperties 和excludeNullProperties参数。当然还有其他的方法,如给pojo的属性加json注解。
9、总结: action中避免使用get开头的action方法,去掉action中的接口的get方法 为json类型的result配置includeProperties, excludeProperties等参数.
struts2-json-plugin-2.1.8.1.jar
json-lib-2.1.jar
commons-collections-3.2.jar
commons-beanutils-1.7.0.jar
commons-lang-2.3.jar
commons-logging-1.0.4.jar
ezmorph-1.0.3.jar
这7个包是返回json形式的数据必须的。因为json大量引用了Apache commons的包,所以要加入4个,commons包,除了commons的包外,还需要引入一个 ezmorph的包。最后加入struts2必须的6个包:
struts2-core-2.1.8.1.jar
xwork-core-2.1.6.jar
ognl-2.7.3.jar
freemarker-2.3.15.jar
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
2、后台:
1) Userinfo实体类代码 public class UserInfo implements Serializable {
private int userId;
private String userName;
private String password;
get set方法略
}
2) Action类 public class TestAction extends ActionSupport {
private String message; //使用json返回单个值
private UserInfo userInfo; //使用json返回对象
private List userInfosList; //使用josn返回List对象
get set方法略
/*返回单个值*/
public String returnMsg(){
this.message = "成功返回单个值";
return SUCCESS;
}
/*返回UserInfo对象*/
public String returnUser(){
userInfo = new UserInfo();
userInfo.setUserId(10000);
userInfo.setUserName("刘栋");
userInfo.setPassword("123456");
return SUCCESS;
}
/*返回List对象*/
public String returnList(){
userInfosList = new ArrayList<UserInfo>();
UserInfo u1 = new UserInfo();
u1.setUserId(10000);
u1.setUserName("张三");
u1.setPassword("111111");
UserInfo u2 = new UserInfo();
u2.setUserId(10001);
u2.setUserName("李四");
u2.setPassword("222222");
userInfosList.add(u1);
userInfosList.add(u2);
return SUCCESS;
}
}
3) struts.xml(必须继承json-default、json-default继承自struts-default) <package name="default" namespace="/json" extends="json-default">
<action name="returnMsg" class="com.testAction " method="returnMsg">
<result name="success" type="json">
<param name="root">validate</param>
</result>
</action>
<action name="returnUser "
class="com.testAction " method="returnUser ">
<result name="success" type="json">
<param name="includeProperties">
userInfo\.userId,userInfo\.userName,userInfo\.password
</param>
</result>
</action>
<action name="returnList" class="com.testAction "
method="returnList">
<result name="success" type="json">
<param name="includeProperties">
userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password
</param>
</result>
</action>
</package>
3、前台:
1) 页面引入jquery-1.4.2.js
2) 代码如下: <script language="javascript">
function getMsg(){
$.ajax({
url:'json/returnMsg.action',
type:'post',
dataType:'json',
success:function(data){
$("#result").html(data.message);
}
});
}
function getUser(){
$("# result ").html("");
$.ajax({
url:'json/returnUser.action',
type:'post',
dataType:'json',
success:function(data){
$("#result").append("用户ID:"+data.userInfo.userId+"")
.append("用户名:"+data.userInfo.userName+"")
.append("密码:"+data.userInfo.password+"");
}
});
}
function getUserList(){
$("# result ").html("");
$.ajax({
url:'json/returnList.action',
type:'post',
dataType:'json',
success:function(data){
$.each(data.userInfosList,function(i,value){
$("#result").append("第"+(i+1)+"个用户")
.append("用户名:"+value.userName+"")
.append("密码:"+value.password+"");
}
}
});
}
</script>
<div id="result"></div>
<input type="button" value="获得单个消息" onclick="getMsg()"/>
<input type="button" value="获得用户信息" onclick="getUser()"/>
<input type="button" value="获得用户列表" onclick="getUserList()"/>
4、只要继承extends="json-default",result type设置成json之后,容器会把action的属性自动封装到一个json对象中(json拦截器来做),然后调用ajax的callback方法. 返回json数据
5、includeProperties 参数:输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。
如:输出UserInfo的所有属性及UserInfo的userName属性
<result type="json">
<param name="includeProperties"> userInfo.*,
userInfo \. userName </param>
</result>
6、excludeProperties 参数:输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式,类同includeProperties
7、输出一个JSON List列表
<result name="success" type="json">
<param name="includeProperties">
userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password
</param>
</result>
其中userInfosList是action中的一个List类型的属性,userInfosList \[\d+\]\. userName表示,userInfosList中存储的对象0..end的userName属性(list中存储的对象必须有userName属性)。
8、为什么要用includeProperties或excludeProperties 参数:主要是为了过滤掉接口,pojo的set、list、其它对象等不需要的数据防止循环取其它关联对象或找不到接口。如果不配置,默认是处理action中的所有属性,如果action中有接口注入,json拦截器可能找不到接口而返回不了结果,还有如果action中有一个对象,这个对象与好多对象都有关联,json拦截器会将相关联的所有对象的属性全部转换成json格式,如果其它对象有list、set,其返回结果相当庞大,有可能是死循环而无法返回 。如果不用<param name="includeProperties">或其他方式进行json数据过滤,通过debug你会发现前台返回的json字符串,是把action中的所有属性全部转化成json字符串返回给客户端(包括service接口、pojo所有属性及有关联的pojo。有时候根本返回不了结果,也不报错,后台执行了,但前台执行不到callback function,这主要是因为找不到接口或者关联的pojo太多,造成死循环),一般情况下用的最多的就是root、includeProperties 和excludeNullProperties参数。当然还有其他的方法,如给pojo的属性加json注解。
9、总结: action中避免使用get开头的action方法,去掉action中的接口的get方法 为json类型的result配置includeProperties, excludeProperties等参数.
发表评论
-
StrutsUtils 未定义”错误
2011-04-02 00:14 1886使用s:optiontransferselect标签必须放在s ... -
struts2.xml method属性不配置时,url链接不能带参数
2011-03-31 14:21 1579如下: <action name="linkA ... -
s:iterator使用begin、end、step
2011-02-28 18:29 9524<s:iterator value="list ... -
关于struts2页面数据处理的分析
2011-01-25 09:31 2718关于struts2页面数据处理的分析 前言:struts2中 ... -
s:doubleselect不换行
2011-01-21 13:55 1785属性 labelposition=left 换行 labelp ... -
struts2 中 OGNL表达式的使用
2010-12-17 13:46 1192GNL是Object Graph Navigation L ... -
webwork中变量的存放有两种方式
2010-12-17 13:37 19511.web app通用的方式,即是:放入sesson,requ ... -
paramsPrepareParamsStack
2010-12-17 12:43 1913paramsPrepareParamsStack在Struts ... -
struts2自己定义拦截器
2010-12-17 12:42 1511Interceptor(拦截器), ... -
struts2与webWork2的区别
2010-12-17 11:31 37061.Struts2更加优雅一些,至少Action变成了一个纯粹 ... -
配置了sitemesh后用struts2标签就报错
2010-12-17 09:49 1648配置了sitemesh后用struts2标签就报错,用ognl ... -
struts2验证器
2010-12-15 11:25 1328在Struts2框架中Validator必须在系统中注册,如果 ... -
struts2 json插件
2010-12-15 11:24 1221<package name="default& ... -
STRUTS2 ACTION的跳转类型说明
2010-12-15 11:23 1300chain:Action链式处理的结果类型,也就是将结果转发到 ... -
struts2拦截器简介
2010-12-15 11:08 1276拦截器简介: 1:拦截器-Exception <int ... -
struts2调用javabean中的方法
2010-09-27 16:28 16361.<s:set name="str" ... -
struts2 result type=chain、dispatcher、redirect
2010-08-23 17:14 2986dispatcher:用于页面转发,页面跳转过程一直是同一个线 ... -
struts2取url参数
2010-08-16 15:21 2119取url参数,用request.getParameter(na ... -
struts2 alert 错误消息
2010-08-05 17:55 1229<s:if test="hasFieldErr ... -
struts2的result type="plainText"
2010-07-13 14:46 63231.作用:将response中的数据直接打印到当前页面指定的地 ...
相关推荐
本文将详细介绍如何使用Struts2.1.8.1与jQuery1.4.2来返回JSON数据,包括必要的依赖包引入、后端逻辑编写以及配置文件设置等方面。 #### 一、引入必要依赖包 为了使Struts2能够支持JSON数据格式,我们需要引入一...
再或者通过`AJAX`方法进行异步数据请求,结合`json`格式的数据进行页面动态更新。 在学习笔记中,我们可以记录下这些实践经验,总结每个方法的用法和适用场景,对比不同版本间的差异,以及在实际项目中遇到的问题及...
jquery-1.4.2.js jquery-1.4.2.min.js jquery-1.4.2-vsdoc.js 中文版vsdoc jquery-1.4.2-vsdoc_en.js jquery.cookie.js
JQuery1.4.2+Struts2.1.8+JSON0.34+Spring2.5.6+Hibernate3.5+XFire1.2.6整合实例(已上传) 1、JSON0.34使用的是struts2附带的struts2-json-plugin-2.1.8.1.jar 2、db是mysql,名字为test,用户名root,密码空 3、...
5. **Ajax**:简化异步数据获取,如`$.ajax()`、`$.get()`和`$.post()`,方便进行JSON、XML或其他格式的数据交互。 接下来,我们转向jQuery1.4.1.chm文档。这是一个帮助文件,通常包含了jQuery库的所有函数、方法、...
在压缩包中,`jquery-1.4.2+vsdoc`可能是`jquery-1.4.2.js`与`jquery-1.4.2-vsdoc.js`两个文件的合并,方便开发者在不离开Visual Studio的环境下直接使用jQuery 1.4.2并享受到智能提示的支持。 总的来说,这个...
里面包含 Jquery 1.4.2 的 jquery.cookie+ jquery-1.4.2+ jquery-1.4.2.min+ jquery-1.4.2-vsdoc+ jquery-1.4.2-vsdoc_en + jQuery1.4.2_API帮助文档简体中文版
"respond.min.js 1.4.2" 是一个JavaScript库,主要用于处理响应式设计,尤其在与Bootstrap框架配合使用时。这个库的核心功能是为不支持媒体查询(Media Queries)的旧版Internet Explorer浏览器提供支持,确保在这些...
《jQuery 1.4.2:深入理解与应用》 jQuery是JavaScript库中的翘楚,以其简洁的API和强大的功能赢得了开发者们的广泛喜爱。这里我们主要关注的是jQuery 1.4.2版本,包括核心库文件`jquery-1.4.2.js`以及辅助开发的`...
《jQuery 1.4.2:深入理解与应用》 jQuery是JavaScript库的杰出代表,以其简洁、易用的API闻名于世。本篇将详细探讨jQuery 1.4.2这一经典版本,以及其对应的压缩文件jquery.min-1.4.2.js。 一、jQuery的核心理念 ...
这个压缩包包含了不同版本的jQuery库,包括`jquery-1.10.2.min.js`, `jquery-1.4.4.min.js`, `jquery-1.4.2.min.js`以及`jquery.min.js`。这些文件都是经过压缩和优化的版本,用于在网页中提高性能,减少加载时间。 ...
《jQuery 1.4.2:核心库与...无论是在创建动态网页、实现复杂交互,还是进行数据持久化,jQuery 1.4.2都能提供高效、简洁的解决方案。尽管现在有更新的jQuery版本,但1.4.2仍因其稳定性和广泛的应用而值得深入研究。
标题中的"jquery.min.js"、"jquery-1.4.2.min.js"、"jquery-1.4.4.min.js"以及"jquery-1.10.2.min.js"都是不同版本的jQuery库,其中".min"表示这些文件是经过压缩和优化的版本,适合在生产环境中使用,以减少页面...
附件里里面有 jquery-1.4.2.js jquery-1.4.2.min.js jquery-1.4.2-vsdoc.js JQuery_1.4.2_API.chm 在VS2008里引用jquery-1.4.2.js和jquery-1.4.2-vsdoc.js,可以支持jquery方法的智能提示。
《jQuery Mobile 1.4.2:移动应用开发利器》 在移动互联网飞速发展的今天,jQuery Mobile作为一款强大的前端框架,为开发者提供了构建响应式、触摸友好的移动Web应用程序的强大工具。尤其对于jQuery Mobile 1.4.2...
《jQuery 1.4.2与jQuery Cookie插件详解》 在Web开发中,JavaScript库jQuery因其简洁的语法和强大的功能而备受青睐。本篇将深入探讨jQuery 1.4.2版本及其与jQuery Cookie插件的使用,帮助开发者更好地理解和应用这...
jquery.mobile.custom.min.js v1.4.2 偶然发现这文件不好找还有挺贵,所以传一个
在网上想找一个strus1的关于json的使用例子,但是找了半天找不到,最后狠下心自己写了一个,使用的是谷歌的Gson,前台技术jQuery,后台struts1.2.7。希望能帮上那些急需相关知识的初学者。谢谢大家...