Struts2+JSON 实现AJAX 返回对象和列表

合集下载

Struts2返回JSON对象

Struts2返回JSON对象

1、引入包(本文中的包全部引自struts-2.1.8.1\lib):struts2-json-plugin-2.1.8.1.jarjson-lib-2.1.jarcommons-collections-3.2.jarcommons-beanutils-1.7.0.jarcommons-lang-2.3.jarcommons-logging-1.0.4.jarezmorph-1.0.3.jar这7个包是返回json形式的数据必须的。

因为json大量引用了Apache commons的包,所以要加入4个,commons包,除了commons的包外,还需要引入一个ezmorph的包。

最后加入struts2必须的6个包:struts2-core-2.1.8.1.jarxwork-core-2.1.6.jarognl-2.7.3.jarfreemarker-2.3.15.jarcommons-fileupload-1.2.1.jarcommons-io-1.3.2.jar2、后台: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>4、只要继承extends="json-default",result type设置成json之后,容器会把action的属性自动封装到一个json对象中(json拦截器来做)5、includeProperties 参数:输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。

struts2+json+jquery实现ajax登录和注册功能

struts2+json+jquery实现ajax登录和注册功能

在上一篇博文中已经学习了如何整合mybatis和spring,实现持久层的CRUD操作、业务层的事务管理和spring的IoC。

现在我们这个demo的基础上,继续整合struts2,并利用json插件和jquery实现ajax,完成后系统将实现登录与注册的简单功能。

浏览器端如何简单、高效地与服务器端进行数据交互是web开发者最为关心的内容。

在客户端构造intput表单数据或者拼凑URL参数名称/参数值,然后在服务器端笨拙地用request.getParameter(“参数名称”)获取参数显然已经过时了,在struts2中,只要在action 里定义了input表单名称/URL参数名称对应的String类型属性,并设置getter和setter 方法,struts2在调用action的时候就可以根据参数值自动帮你设置好action中对应的属性值供你使用,这极大地方便了开发者。

但是json更为强大——它可以根据浏览器端上传的符合格式的数据设置action中对象的值,也就是说,struts2自动封装的数据只有一层,而json是无限层。

json给页面参数的传递带来极大的方便,结合jquery来使用,可以轻易地做到页面局部刷新、页面无跳转进行友好的系统异常提示等,其中后者是我觉得最有必要做到的一点,在action中定义一个message变量,把action方法执行的结果或者系统异常信息放到里面以json的方式返回给客户端,客户端根据这个变量的结果来进行下一步的操作或者提示系统异常信息,非常地好用。

json由javascript中的对象和数组构成,基本形式是{key:value},key为属性名称,value 为属性值,value可以为数字、字符串、数组、对象,value可以为数组和对象是json可以封装无限层数据的关键所在。

至于如何建构和解析json不是本篇博文的详细表述范围,请参考其他资料。

现在就让我们利用struts2作为MVC框架,整合json插件,在浏览器端使用jquery解析和系列化json数据,由此制作一个具有登陆/注册功能的小demo。

ajax格式及用法

ajax格式及用法

ajax格式及用法Ajax(AsynchronousJavaScriptandXML)是一种使用客户端脚本(通常是JavaScript)与服务器交互的强大技术。

通过Ajax,我们可以实现异步的、基于事件的、基于浏览器的数据请求,从而极大地提高了网页的交互性和响应性。

本篇文章将详细介绍Ajax的格式及用法。

一、Ajax请求格式Ajax请求的基本格式如下:`XMLHttpRequest对象.open(method,url,async,user,password);`其中,method表示请求方法,如GET或POST;url表示请求的URL;async表示是否异步请求,通常为true;user和password用于HTTP认证。

在请求中,我们通常会发送一些数据,这些数据可以以查询字符串的形式附加在URL之后,也可以作为POST请求的数据主体发送。

这些数据可以通过JavaScript对象来创建,或者从XML、JSON或其他数据源获取。

二、Ajax请求示例以下是一个简单的AjaxGET请求示例:`varxhr=newXMLHttpRequest();xhr.open("GET","data.json",true);xhr.onreadystatechange=function(){if(xhr.readyState==4&&xhr.status==200){//请求成功,将返回的数据处理成JSON格式并输出到consolevardata=JSON.parse(xhr.responseText);console.log(data);}};xhr.send();`在这个示例中,我们创建了一个新的XMLHttpRequest对象,并打开了到"data.json"的GET请求。

当请求状态改变时,我们检查请求是否成功,并使用JSON.parse将返回的文本转换为JSON格式。

struts2实现ajax交互

struts2实现ajax交互
课程目标
了解Struts2中ajax的响应方式(响应text文本、响 应json集合) 掌握Struts2和ajax交互的代码规范 Sturts2响应json的代码规范和配置规范
1 / 16
上一课内容回顾
1, 2, 3,
2 / 16
Ajax交互过程回顾
Ajax的原理,简单来说通过XmlHttpRequest对象来向服 务器发异步请求,从服务器获得数据,然后用 javascript来操作DOM而更新页面。
4 / 16
JavaScript方法举例
var xmlhttp; 参考 function loadXMLDoc(url){ xmlhttp = new XMLHttpRequest(); if(xmlhttp!=null){ xmlhttp.onreadystatechange=state_Change; xmlhttp.open("GET",url,true); xmlhttp.send(null); }else{ alert("Your browser does not support XMLHTTP."); } } function state_Change(){ if (xmlhttp.readyState==4) {// 4 = "loaded" if (xmlhttp.status==200) {// 200 = OK document.getElementById("msg").innerHTML=xmlhttp.responseText; }else{ alert(“Problem retrieving XML data”); JSP页面部分 }}}
Struts2与Ajax交互的步骤

jQuery操作Ajax和Json

jQuery操作Ajax和Json

jQuery操作Ajax和Json嗯,自己学SSH和做项目也已有两个月了。

自己今天来整理一下自己在项目中利用jQuery操作过的Ajax和Json。

当时我对于jQuery操作Ajax几乎不怎么了解,但是项目中有需求,所以自己也是必须要去使用,因此现在来详细讲解一下自己在项目中的操作。

功能中,有一个下拉框,里面存储的是服务商的信息,首选项是“--请选择--”,当我选择第一个下拉框中服务商信息之后,后面紧接着将会得到这个选定的服务商下的所有产品。

做一个联动操作。

虽然我不会用jQuery操作Ajax,但是我第一反应就是想到利用这块技术,于是自己就开始查找对应的资料了。

首先,我在Action中,将服务商的信息从数据库查找出来,保存到List集合中,将集合转发到JSP界面上,利用的是struts2标签:<div><s:select name="provider.iscenicid"list="#request.providerList"listKey="i scenicid"listValue="szcenicname"headerKey=""headerValue="--请选择"onchange="onChangeOptionScenic(this)"id="scenicType"/></s:select><span id="productInfo"></span></div>(ps:其实这个里面,本不应该设置headerKey和headerValue,应该在Action中在List集合中去增加一行再进行操作。

)中间的span标签就是将要利用jQuery操作Ajax把产品信息增加到span标签里面!其次,进行jQuery操作Ajax了:<script>function onChangeOptionScenic(_this) {// 获取下拉框中的listKey值var iscenic =$(_this).val();// 设置一个变量,来进行下面的操作var htmltv ="";// 设置URL地址var url ="/tips/travelmessage.action";// Ajax操作开始$.ajax ({// 设定URLurl : url,// 设置提交方式,这里为posttype : "post",// 设置数据类型为JsondataType : "json",// 设置传过去的值的属性名data : {"iscenicid" : iscenic},// 成功返回之后的操作方法success : function(result) {// 获取Action中传回来的result的值var json =eval("("+result+")");// 循环将服务商下的产品以复选框形式拼接出来for(var i=0; i<json.length; i++) {// 将产品信息以复选框形式拼接起来htmltv +="<input type='checkbox' name='productNa me'value='"+json[i].productId+"'/>"+json[i].prod uctName;}// 添加到上面的span标签中$("#productInfo").val(htmltv);}});}</script>最后,将result进行一个映射文件的配置,配置信息如下(根据公司的一些设定而操作):<action name="travelmessage"class="com.web.system.tips.TravelMessageAction" method="trav elMessage"><result type="json"><param name="root">result</param></result></action>在TravelMessageAction中,需要将内容返回到result中,部分代码如下:List productList = travelMessageService.getProductInfo(product);JSONArray json =new JSONArray().fromObject(productList);result = json.toString();return SUCCESS;至此,一个完整的操作已完成,这就是自己的一点点整理,希望以后有更多的有技术的知识与大家分享!。

Struts2配置json数据返回

Struts2配置json数据返回

Struts2配置json数据返回(作者:张宗杰时间:2012-05-07)从事软件编程工作近3个月来,在项目中经常的使用到json数据格式。

由于公司的框架已经高度封装好了,我们只需用java调用相关的类,即可向浏览器返回json数据格式,但本人对这个十分好奇,今天抽空研究了下在struts2下如何自己配置json数据返回方法。

首先,在myeclipse中新建一个java web工程,接着引入Struts2必须的jar包,这时要使用json,还需多引入一个名字为“struts2-json-plugin-2.3.1.2.jar”的jar包(版本号和你下载的struts2有关,本人使用的是struts-2.3.1.2),结构如图1所示:图1jar包引入同时把jquery.js也放到工程中,后面采用javascript读取出服务器返回的json数据。

然后配置web.xml文件,具体步骤不说了,如果不会struts2的,自己先去学习一下,然后再看本文章。

然后在struts.xml中新增如图2所示代码,用于strust2识别json:图2json配置我们可以自己手工的用java代码输出json数据格式,同时也可以使用很多开源的类来来实现(可以访问去下载java的json相关类)。

在这里,我使用org.json。

下载下来后,解压出源码,对照着在myeclipse中建立出包结构,把这些源代码放到里面,如图3所示:图3引入org.json接着在com.ajie包下建立JsonTest.java类,继承ActionSupport类。

然后建立一个方法,实现向客户端返回http的数据,如图4所示:图4接着实现strust2的execute方法,代码如图5所示:图5上述代码,封装了2个json值,分别是test和msg。

然后在index.jsp中编写html代码和js代码,html代码如图6所示:图6Js代码如图7所示:图7然后将web工程部署到tomcat中,运行,打开浏览器,运行后看到如图8所示界面:图8接着,打开firebug,点击按钮后观察http的传输流程,结果如图9所示:图9浏览器也将弹出一个对话框,显示json中test对应的值,如图10所示:图10本文只是讲述了如何在struts2中使用json,只要稍微修改就可以在项目中运用。

Struct2_使用Ajax调用Action方法并返回值

Struct2_使用Ajax调用Action方法并返回值

Struct2_使⽤Ajax调⽤Action⽅法并返回值⼀、Login.jsp1、<head>引⼊jquery:<script type="text/javascript"src="/ajax/jQuery/jquery-1.7.1.js"></script>2、界⾯控件:⽤户名:<input type="text"id="userName"><input type="button"id="btnAjax"value="Ajax调⽤"/>3、提交ajax请求<script type="text/javascript">$(function() {$("#btnAjax").click(function() {var userName = $("#userName").val().trim();if (userName == '') {alert("⽤户名不能为空");return false;}//login1为Action类命名空间名称;AjaxExecute为Action⽅法名称$.ajax({type : "post",url : '/login1/ajaxExecute',data : {//设置数据源userName : userName,password : "我是密码"},dataType : "json",//设置需要返回的数据类型success : function(d) {alert(d.sayHi);},error : function(d) {alert(d.responseText);}});});});</script>⼆、后台类:LoginActionNoNamespcepackage action;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.Map;import org.apache.struts2.convention.annotation.Action;import space;import org.apache.struts2.convention.annotation.ParentPackage;import org.apache.struts2.convention.annotation.Result;import org.apache.struts2.interceptor.validation.SkipValidation;import freemarker.template.SimpleDate;@ParentPackage("json-default")@Namespace("/login1")public class LoginActionNoNamespce extends SuperActionSupport {private static final long serialVersionUID = 1L;private Map<String, String> dataMap;//会把本类所有getter⽅法序列化成字符串返回给jsp页⾯public Map<String, String> getDataMap() {return dataMap;}public void setDataMap(Map<String, String> dataMap) {this.dataMap = dataMap;}@SkipValidation@Action(value = "ajaxExecute", results = { @Result(type = "json", params = { "root", "dataMap" }) })public String ajaxExecute() throws Exception {this.dataMap = new HashMap<String, String>();// 参数名称必须和jsp的空间名称⼀⼀对应String userName = request.getParameter("userName");String password = request.getParameter("password");dataMap.put("isSuccess", "true");SimpleDateFormat now = new SimpleDateFormat("yyyy年MM⽉dd⽇ HH时mm分ss秒");dataMap.put("sayHi", "Hi:" + userName + " 当前时间为:" + now.format(new Date()) + password);return SUCCESS;}}三、注意事项1. 类注解:@ParentPackage("json-default"),⽐如为json-default,不能为struts-defaultjson-default是继承于structs-default的,见.m2\repository\org\apache\struts\struts2-json-plugin\2.3.16.3\struts2-json-plugin-2.3.16.3.jar\struts-plugin.xml2. Action注解:@Action(value = "ajaxExecute", results = { @Result(type = "json", params = { "root", "dataMap" }) }),这⾥的type必须为json、root是固定值,去掉params节点会返回undefined3. 这⾥的dataMap定义为:private Map<String, String> dataMap;必须要添加getter、setter参数,否则返回null4. JSP页⾯(这⾥可以⽤命名空间,如url : '/login1/ajaxExecute', @ParentPackage("json-default")这样设置就不会报错)5. maven管理,需要引⽤的库<dependencies><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.3.16</version><exclusions><exclusion><groupId>org.javassist</groupId><artifactId>javassist</artifactId></exclusion></exclusions></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-convention-plugin</artifactId><version>2.3.16.3</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-json-plugin</artifactId><version>2.3.16.3</version></dependency><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version></dependency></dependencies>。

ajax 调用方法

ajax 调用方法

ajax 调用方法Ajax调用方法详解Ajax(Asynchronous JavaScript and XML)是一种用于创建快速动态网页的技术,它通过在后台与服务器进行少量数据交换,实现了网页无需刷新即可更新部分内容的功能。

在前端开发中,Ajax的应用非常广泛,本文将详细介绍几种常见的Ajax调用方法。

一、XMLHttpRequest对象XMLHttpRequest是Ajax的核心对象,它用于与服务器进行数据交互。

通过创建XMLHttpRequest对象并调用其相关方法,可以实现异步加载数据、发送数据到服务器等操作。

创建XMLHttpRequest对象的方法如下:```javascriptvar xhr;if (window.XMLHttpRequest) {xhr = new XMLHttpRequest(); // 非IE浏览器} else if (window.ActiveXObject) {xhr = new ActiveXObject('Microsoft.XMLHTTP'); // IE浏览器}```使用XMLHttpRequest对象发送GET请求的方法如下:```javascriptxhr.open('GET', 'data.php?param1=value1&param2=value2', true);xhr.onreadystatechange = function() {if (xhr.readyState === 4 && xhr.status === 200) {var response = xhr.responseText;// 处理服务器返回的数据}};xhr.send();```使用XMLHttpRequest对象发送POST请求的方法如下:```javascriptxhr.open('POST', 'data.php', true);xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');xhr.onreadystatechange = function() {if (xhr.readyState === 4 && xhr.status === 200) {var response = xhr.responseText;// 处理服务器返回的数据};xhr.send('param1=value1&param2=value2');```二、jQuery的Ajax方法jQuery是一款功能强大的JavaScript库,它封装了许多常用的操作,包括Ajax。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Struts2+JSON 实现AJAX 返回对象和列表Struts2jsonAjaxStrutsJSPBeanJSON 是一个插件,它允许我们在JavaScript中异步调用Action,它提供了一个json的返回结果类型(ResultType),只要为Action指定类型为json返回结果类型,那么这个响应结果不需要返回给任何视图层,JSON会将Action里的状态信息序列化为JSON指定格式的数据,并将该数据返回给JAVASCRIPT,这样可以完成AJAX的应用交互.要应用 JSON 插件,首先需要到/p/jsonplugin/downloads/list下载最新JSON插件,我这里下载的是jsonplugin-0.33.jar ,将该文件拷到WEB工程的LIB目录,当然还需要下载Struts2 类库,可以到/download.cgi#struts2014这里去下载,下载完后解压缩,将JAR拷到WEB工程的LIB目录,不能少于以下几个JAR文件(struts2-api-2.0.5.jar、struts2-core-2.0.5.jar、ognl-2.6.9.jar、xwork-2.0.0.jar、commons-logging-1.1.jar、freemarker-2.3.8.jar,具体文件名视版本而定),接下来我们可以写个应用来试验,本例程分为二步来写,第一步实现返回一个结果对象,第二步实现返回一个结果列表,首先来看下返回结果对象的实现.我们需要先建立一个JavaBean 为值对象,用来将用户的基本数据封装进去,该实体在结果对象和结果列表中都会使用到Users.java 代码如下:Java代码1.package com.jsontostruts2.vo;2.3./**4.* <p>5.* 创建人:ChenTao6.* <p>7.* 创建日期:2009-5-18 下午05:24:488.* <p>9.*/10.public class Users {11.12.private Integer userId;13.14.private String userName;15.16.private String sex;17.18.public Users() {19.20.}21.// get... set.... 略......22.}实现 UserAction.java 源码如下:Java代码1.package com.jsontostruts2.action;2.3.import com.googlecode.jsonplugin.annotations.JSON;4.import ers;5.import com.opensymphony.xwork2.ActionSupport;6.7./**8.* <p>9.* 创建人:ChenTao10.* <p>11.* 创建日期:2009-5-18 下午05:22:5012.* <p>13.*/14.@SuppressWarnings("serial")15.public class UserAction extends ActionSupport {16.17.private Users users;18.19.@JSON(name="USER")20.public Users getUsers() {21.return users;22.}23.24.public void setUsers(Users users) {ers = users;26.}27.28.@Override29.public String execute() throws Exception {ers = new Users();ers.setUserId(1);ers.setUserName("ctojxzsycztao");ers.setSex("男人");34.return SUCCESS;35.}36.37.}接下来我们需要配置 struts.xml 文件,为了在现下面不再重复写该文件,这里我将结果对象和列表的请求控制一并贴上来,文件内容:Xml代码1.<?xml version="1.0" encoding="UTF-8"?>2.<!DOCTYPE struts PUBLIC3."-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"4."/dtds/struts-2.0.dtd">5.6.<struts>7.<!-- 注意这里扩展不再是 struts-default,而是 json-default -->8.<package name="jsonManager" extends="json-default">9.<!-- 返回结果类型为 json -->10.<action name="userJson"class="erAction">11.<result type="json"/>12.</action>13.<!-- 该action在返回列表时添加进来的 -->14.<action name="jsonlist"class="erListAction">15.<result type="json"/>16.</action>17.18.</package>19.</struts>能后创建web.xml 和 userjson.jsp:Xml代码1.web.xml :2.<?xml version="1.0" encoding="UTF-8"?>3.<web-app version="2.5" xmlns="/xml/ns/javaee"4.xmlns:xsi="/2001/XMLSchema-instance"5.xsi:schemaLocation="/xml/ns/javaee6./xml/ns/javaee/web-app_2_5.xsd">7.8.<filter>9.<filter-name>Struts2</filter-name>10.<filter-class>.apache.struts2.dispatcher.FilterDispatcher12.</filter-class>13.</filter>14.<filter-mapping>15.<filter-name>Struts2</filter-name>16.<url-pattern>*.action</url-pattern>17.</filter-mapping>18.<filter-mapping>19.<filter-name>Struts2</filter-name>20.<url-pattern>*.jsp</url-pattern>21.</filter-mapping>22.23.<welcome-file-list>24.<welcome-file>index.jsp</welcome-file>25.</welcome-file-list>26.</web-app>userjson.jsp :Html代码1.<%@ page language="java" contentType="text/html;charset=UTF-8"%>2.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">3.<html>4.<head>5.<title>json 返回对象处理</title>6.<script language="javascript">7.var xmlHttp = false;8.try{9.xmlHttp = new ActiveXObject("msxml2.XMLHTTP");10.}catch(e1){11.try{12.xmlHttp = new ActiveXObject("microsoft.XMLHTTP");13.}catch(e2){14.try{15.xmlHttp = new XMLHttpRequest();16.}catch(e3){17.xmlHttp = false;18.}19.}20.}21.if(!xmlHttp){22.alert("create xmlHttpRequest fail");23.}24.function jsonResult(){25.xmlHttp.onreadystatechange = function(){26.if(xmlHttp.readyState == 4) {27.// 将 JSON 对象转换为JSON字符串,需要注意调用eval函数时必须使用"("和")"将JSON字符串括起来,否28.29.则会出错30.var userObj = eval('(' + xmlHttp.responseText + ')');31.var userStr = "<table border=0>";erStr += '<tr><td><b>userId</b></td><td>' + erId+ '</td></tr>';erStr += ('<tr><td><b>userName</b></td><td>' +erName + '</td></tr>');erStr += ('<tr><td><b>sex</b></td><td>' + ER.sex +'</td></tr>');erStr += "</table>";36.document.getElementById('jsonDiv').innerHTML = userStr;37.}38.}39.xmlHttp.open("POST","userJson.action",true);40.xmlHttp.send(null);41.}42.</script>43.</head>44.<body>45.<div id="jsonDiv"></div>46.<input type="button" value="show" onclick="jsonResult();">47.</body>48.</html>现在你可以将应用发布到你的容器当中输入http://localhost:8080/struts2ToJson/userjson.jsp点show,这个时候你可以看到你想要的结果,接来实现下返回列表的做法,当然与返回对象会有所不同,我们需要将一个List对象转换为一个JSON规范的字符串,能后发送给客户端的JS,首先建立一个将List 转换为指定字符串的工具类,该工具是在一个无意间从网上看到就拿来用了,经过少许修改,为了减少代码行数我将只贴出适用于本示例的代码:JsonUtil.java :Java代码1.package com.jsontostruts2.util;2.3.import java.beans.IntrospectionException;4.import java.beans.Introspector;5.import java.beans.PropertyDescriptor;6.import java.util.List;7.8./**9.* <p>10.* @author ChenTao11.* <p>12.* @Date 2009-5-18 下午05:47:2713.* <p>14.*/15.public class JsonUtil {16.17./**18.* @param object19.* 任意对象20.* @return ng.String21.*/22.public static String objectToJson(Object object) {23.StringBuilder json = new StringBuilder();24.if (object == null) {25.json.append("\"\"");26.} else if (object instanceof String || object instanceof Integer){27.json.append("\"").append((String)object).append("\"");28.} else {29.json.append(beanToJson(object));30.}31.return json.toString();32.}33.34./**35.* 功能描述:传入任意一个 javabean 对象生成一个指定规格的字符串36.*37.* @param bean38.* bean对象39.* @return String40.*/41.public static String beanToJson(Object bean) {42.StringBuilder json = new StringBuilder();43.json.append("{");44.PropertyDescriptor[] props = null;45.try {46.props = Introspector.getBeanInfo(bean.getClass(), Object.class)47..getPropertyDescriptors();48.} catch (IntrospectionException e) {49.}50.if (props != null) {51.for (int i = 0; i < props.length; i++) {52.try {53.String name = objectToJson(props[i].getName());54.String value =objectToJson(props[i].getReadMethod().invoke(bean));55.json.append(name);56.json.append(":");57.json.append(value);58.json.append(",");59.} catch (Exception e) {60.}61.}62.json.setCharAt(json.length() - 1, '}');63.} else {64.json.append("}");65.}66.return json.toString();67.}68.69./**70.* 功能描述:通过传入一个列表对象,调用指定方法将列表中的数据生成一个JSON规格指定字符串71.*72.* @param list73.* 列表对象74.* @return ng.String75.*/76.public static String listToJson(List<?> list) {77.StringBuilder json = new StringBuilder();78.json.append("[");79.if (list != null && list.size() > 0) {80.for (Object obj : list) {81.json.append(objectToJson(obj));82.json.append(",");83.}84.json.setCharAt(json.length() - 1, ']');85.} else {86.json.append("]");87.}88.return json.toString();89.}90.}UserListAction.java:Java代码1.package com.jsontostruts2.action;2.3.import java.util.ArrayList;4.import java.util.List;5.6.import com.googlecode.jsonplugin.annotations.JSON;7.import com.jsontostruts2.util.JsonUtil;8.import ers;9.import com.opensymphony.xwork2.ActionSupport;10.11./**12.* <p>13.* 创建人:ChenTao14.* <p>15.* 创建日期:2009-5-18 下午05:45:4216.* <p>17.*/18.@SuppressWarnings("serial")19.public class UserListAction extends ActionSupport {20.21./* 用于存放JSON生成后的字符串结果 */22.private String jsonResult;23.24.@JSON(name="JSONRESULT")25.public String getJsonResult() {26.return jsonResult;27.}28.29.public void setJsonResult(String jsonResult) {30.this.jsonResult = jsonResult;31.}32.33.@Override34.public String execute() throws Exception {35.List<Users> userList = new ArrayList<Users>();ers users = new Users();ers.setUserId(1);ers.setUserName("ctojxzsycztao");ers.setSex("男人");erList.add(users);ers = null;ers = new Users();ers.setUserId(2);ers.setUserName("rain");ers.setSex("女人");erList.add(users);ers = null;ers = new Users();ers.setUserId(3);ers.setUserName("mimi");ers.setSex("女人");erList.add(users);53.jsonResult = JsonUtil.listToJson(userList);54.System.out.println(jsonResult);55.return SUCCESS;56.}57.}接下来将要写一个jsonList.JSP页面来将结果承现给用户Html代码1.<%@ page language="java" contentType="text/html;charset=UTF-8"%>2.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">3.<html>4.<head>5.<title>json 返回列表处理</title>6.<script language="javascript">7.var xmlHttp = false;8.try{9.xmlHttp = new ActiveXObject("msxml2.XMLHTTP");10.}catch(e1){11.try{12.xmlHttp = new ActiveXObject("microsoft.XMLHTTP");13.}catch(e2){14.try{15.xmlHttp = new XMLHttpRequest();16.}catch(e3){17.xmlHttp = false;18.}19.}20.}21.if(!xmlHttp){22.alert("create xmlHttpRequest fail");23.}24.function jsonListResult(){25.xmlHttp.onreadystatechange = function(){26.if(xmlHttp.readyState == 4) {27.var userList = eval('(' + xmlHttp.responseText + ')');28.var user = eval(userList.JSONRESULT);29.var result = "<table border=0>";30.result +="<tr><td>userId</td><td>userName</td><td>sex</td></tr>";31.for(var i=0;i<user.length;i++) {32.result += "<tr>";33.result += "<td>"+user[i].userId +"</td>";34.result += "<td>"+user[i].userName+"</td>";35.result += "<td>"+user[i].sex+"</td>";36.result += "</tr>";37.}38.result += "</table>";39.document.getElementById('jsonDiv').innerHTML = result;40.}41.}42.xmlHttp.open("POST","jsonlist.action",true);43.xmlHttp.send(null);44.}45.</script>46.</head>47.<body>48.<div id="jsonDiv"></div>49.<input type="button" value="show list"onclick="jsonListResult();">50.</body>51.</html>现在将工程重复部署到WEB容器,启动:在浏览器中输入http://localhost:8080/struts2ToJson/jsonList.jsp点 show list按钮,看看结果是否正确,如果不正确请参考本例程,看看有没漏掉部分没有配置进去,在以上代码中我们都有看到 @JSON 的注解,该注解可以改变JSON返回结果的属性名,好了文章就写到这里,需要下载示例的朋友可在附件中下载,里面包含有该文章的源代码和相应的 JAR。

相关文档
最新文档