`
yiyu
  • 浏览: 187169 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

YUI + struts2实现基于JSON通讯的AJAX例子

    博客分类:
  • java
阅读更多
近来做了个小例子,前端使用YUI,后端使用struts2+spring,前后端完全通过AJAX技术完成数据交换,没有传统的页面提交,交换的数据格式采用JSON。为了处理 JSON,后端使用了json-lib。

不知道大家现在在项目中使用AJAX到什么程度,如果全面使用AJAX而弃用传统的提交的话,大家觉得是否可取?有什么地方是不适用的?欢迎大家讨论一下。

下面贴出我做的例子的部分代码。
示例程序演示的是前端接收用户输入的人员信息,然后以JSON格式传输到后端,后端接收后,转成java对象然后进行处理,处理结果再以JSON格式传回前端。
人员信息的类如下:
public class Person {
	private String name;
	private Date birthday;

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public Date getBirthday() {
		return birthday;
	}
}


处理结果信息的类如下:
public class JSONResult {
	static public final int RETCODE_OK = 0;
	static public final int RETCODE_ERR = -1;
	
	private int returnCode;
	private String errMessage;

	public JSONResult(int returnCode) {
		this.returnCode = returnCode;
	}
	
	public JSONResult(int returnCode, String errMessage) {
		this.returnCode = returnCode;
		this.errMessage = errMessage;
	}
	
	public void setReturnCode(int returnCode) {
		this.returnCode = returnCode;
	}

	public int getReturnCode() {
		return returnCode;
	}
	
	public void setErrMessage(String errMessage) {
		this.errMessage = errMessage;
	}

	public String getErrMessage() {
		return errMessage;
	}
}


前端页面如下图:人员信息实际程序中只用到了姓名和生日。


前端AJAX通讯使用的是YUI 的Connection Manager,JSON处理使用的是YUI 的 JSON。
【确定】按钮按下后,将用户输入的数据转换成JSON格式,然后调用struts中定义的RegisterPersonAction.action。【确定】按钮上绑定的处理函数如下:
function addButton_click() {
	//读取人员信息
	var person = new Object();
	person.name = document.getElementById("fullname").value;
	person.birthday = document.getElementById("birthday").value;
	
	//转换为JSON格式,并以"personData"做为属性名
	var strPerson = YAHOO.lang.JSON.stringify(person);
	var postData = "personData=" + strPerson;
	
	//准备回调函数(相应处理函数见下文)
	var callback = {
		success :responseSuccess,
		failure :responseFailure,
		argument : null
	};

	//AJAX异步调用
	var request = YAHOO.util.Connect.asyncRequest('POST', 'RegisterPersonAction.action', callback, postData);
}


回调函数中将返回的JSON数据转成对象,然后根据返回值进行提示。代码如下:
function responseSuccess(o) {
	/* o.tId
	 * o.status
	 * o.statusText
	 * o.getResponseHeader[ ]
	 * o.getAllResponseHeaders
	 * o.responseText
	 * o.responseXML
	 * o.argument
	 */
	
	//将返回的JSON串转成对象
	var ret = YAHOO.lang.JSON.parse(o.responseText);
	
	if (ret.returnCode == 0) { //successed
		alert("成功");
	} else { //failed
		alert("失败 :" + ret.errMessage);
	}
};

function responseFailure(o) {
	alert("服务器处理失败 : " + o.statusText);
}


struts.xml中对ajax异步调用中的url这样定义:
<action name="RegisterPersonAction" method="register" class="personAction">
	<result type="stream">
		<param name="contentType">text/html</param>
		<param name="inputName">inputStream</param>
	</result>
</action>


后台的PersonAction代码如下。其中属性personData用于接收来自前端的人员数据,属性inputStream用于向前端返回JSON格式的处理结果。
public class PersonAction extends ActionSupport {
	private InputStream inputStream;
	
	public void setInputStream(InputStream inputStream) {
		this.inputStream = inputStream;
	}

	public InputStream getInputStream() {
		return inputStream;
	}

	private PersonService personService;
	
	public void setPersonService(PersonService personService) {
		this.personService = personService;
	}

	public PersonService getPersonService() {
		return personService;
	}

	private String personData;
	
	public void setPersonData(String personData) {
		this.personData = personData;
	}

	public String getPersonData() {
		return personData;
	}

	public String register() {
		//将JSON字符串转成java的Person对象
		JSONObject jsonPerson = JSONObject.fromObject(personData);
		String[] dateFormats = new String[] {"yyyy/MM/dd"};
		JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats));
		Person person = (Person)JSONObject.toBean(jsonPerson, Person.class);
		
		//处理人员数据,并根据处理结果生成返回对象
		JSONResult ret;
		try {
			personService.register(person);
			ret = new JSONResult(JSONResult.RETCODE_OK);
		} catch (BusinessException e) {
			ret = new JSONResult(JSONResult.RETCODE_ERR, e.getMessage());
		}
		
		//将返回对象转成JSON字符串
		JSONObject jsonRet = JSONObject.fromObject(ret);
		String strRet = jsonRet.toString();
		
		//返回JSON数据
		try {
			setInputStream(new ByteArrayInputStream(strRet.getBytes("utf-8")));
		} catch (UnsupportedEncodingException e) {
			//略:错误处理
		}
		
		return SUCCESS;
	}
}
  • 大小: 26.5 KB
分享到:
评论

相关推荐

    Struts2中使用JSON+YUI之一[包含功能代码段]

    在Struts2中整合JSON(JavaScript Object Notation)和YUI(Yahoo User Interface Library)可以实现高效的异步数据交互,提升用户体验。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和...

    Struts2+JSON+YUI组合应用之二构建RichClient

    当用户触发一个操作(如点击按钮),Struts2 Action处理请求并返回JSON数据,YUI通过监听Ajax请求完成事件,接收到数据后更新DOM元素,实现无刷新的用户体验。 5. **异步操作**:YUI的Event和Ajax模块使得Struts2...

    Struts on Ajax-Retrofitting Struts with Ajax Taglibs

    S2JS允许开发者更方便地在Struts 2中使用Ajax技术,它提供了一种更为简洁的方式来处理Ajax请求,并且内置了对JSON的支持,使得数据传输更为高效。 #### 结论 通过使用Ajax Taglibs,我们可以在Struts应用程序中...

    ajax十大框架

    Ext JS 是基于 YUI 的扩展,它提供了一组更加丰富的 UI 组件和功能,特别是在数据网格、表单控件等方面表现优异。Ext JS 的设计考虑到了开发者的需求,提供了灵活的配置选项和自定义样式的能力,适合构建企业级 Web ...

    ==ajax使用随便聊==

    在上述描述中,开发者提到了使用Struts1和Spring构建的一个简单的Ajax应用,用户选择用户信息后,通过Ajax发送请求更新数据,然后在页面上显示更新结果。这个例子展示了如何将Ajax技术集成到传统的MVC框架中,提高了...

    java开源包2

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    java开源包3

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    java开源包4

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    DWR与界面开发 资料大全

    2. **AJAX基础**:DWR利用AJAX(Asynchronous JavaScript and XML)技术,实现了页面无需刷新即可更新内容的能力。 3. **安全特性**:DWR提供了一套安全机制,包括白名单、签名等,以防止未经授权的访问。 二、DWR...

    java开源包1

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    java开源包11

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    java开源包6

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    java开源包5

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    java开源包10

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    java开源包8

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    java开源包7

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    java开源包9

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    java开源包101

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    Java资源包01

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

Global site tag (gtag.js) - Google Analytics