日期:2014-05-16  浏览次数:20340 次

【叨、校长】Extjs通过Ajax请求后台Struts2返回一个json对象

首先:新建一个java web项目,添加struts2的支持,配置好相关的xml文件:如下

web.xml文件配置:

?

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.FilterDispatcher
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
  	<welcome-file-list>
    	<welcome-file>index.jsp</welcome-file>
  	</welcome-file-list>
</web-app>
?

?

struts配置文件:

?

<?xml version="1.0" encoding="gbk" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<package name="struts"  extends="json-default">
		<action name="testAction" class="com.daodao.action.TestAction">
			<result name="success" type="json"></result>
		</action>		
	</package>
</struts>
?

?

其次:编写前台EXTJS,这里不在说明!请求方法:我这里使用的是AJAX请求:

?

Ext.Ajax.request({ 
	url : 'testAction.action', 
	 method:'POST', 
	success:function(response,options) {
			alert(eval("("+response.responseText+")"));
	},
	failure:function(response,options){
			alert();
	}
})

?编写后台action实现:

?

public class TestAction extends ActionSupport{
	boolean success;
	List list;
	User user;
	public boolean isSuccess() {
		return success;
	}
	public void setSuccess(boolean success) {
		this.success = success;
	}
	
	public String execute() throws Exception {
		this.success=true;
		user=new User();
		user.setEmail("aaa");
		user.setName("bbb");
		user.setPass("ccc");
		list=new ArrayList();
		list.add(user);
		return SUCCESS;
	}
	public List getList() {
		return list;
	}
	public void setList(List list) {
		this.list = list;
	}
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	
}

?OK这样就前台JS就可以得到一个JSON类型的数据了:

?

"{\"list\":[{\"email\":\"aaa\",\"name\":\"bbb\",\"pass\":\"ccc\"}],\"success\":true,\"user\":{\"email\":\"aaa\",\"name\":\"bbb\",\"pass\":\"ccc\"}}"

?对于这样一个字符串我们可以在前台使用JS内置函数eval()将其转换称JS对象,方便我们的使用

?

eval("("+response.responseText+")")

?根据本实例中的数据类型,转换过的js对象是这样的:一个数组,一个bool类型的success(这个属性后台是必须设置的,前台的会使用这个属性作为判断成功与否的标准!),详情请查看图片附件(JS对象.jsp)!

这样我们前台就可以随心所欲的使用各种数据了!

?

?

项目所需要的jar包:

?

asm-3.3.jar

asm-commons-3.3.jar

asm-tree-3.3.jar

commons-fileupload-1.2.2.jar

commons-io-2.0.1.jar

commons-lang3-3.1.jar

freemarker-2.3.19.jar

javassist-3.11.0.GA.jar

ognl-3.0.5.jar

struts2-core-2.3.4.jar

xwork-core-2.3.4.jar

json-lib-2.3-jdk15.jar

struts2-json-plugin-2.3.4.jar

?