struts2与ajax结合

本文详细介绍了如何使用Struts2框架与Ajax进行高效的数据交互,包括如何配置Struts2来支持复杂的JSON数据格式,如何正确使用$.ajax进行数据提交,并通过示例代码展示了具体的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先要搞清楚$.post和$ajax的区别:

$.post:这是一个简单的 POST 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。

$.ajax:当传递给服务器的数据复杂类型数据的时候,$.post方法就无效了。

json格式:
        简单json格式
            {
                 key:value(基本类型)
            }
        复杂json格式
            {
                 key:value是一个对象
            }

2.$.ajax是ajax请求的企业级处理
     可以传递简单的json对象
     可以用$.ajax传递复杂格式的对象
        *  把struts2与json插件提供的拦截器导入到项目中来,这个拦截器是在struts2-json-plugin-2.3.15.1.jar包中的struts-plugin.xml中定义的
              <interceptors>
                 <interceptor-stack name="ajaxStack">
                    <interceptor-ref name="defaultStack"></interceptor-ref>
                    <interceptor-ref name="json"></interceptor-ref>
                 </interceptor-stack>
              </interceptors>
              <default-interceptor-ref name="ajaxStack"></default-interceptor-ref>
        *  js端必须调用$.ajax提交请求,json格式必须是最标准的字符串的形式,可以利用$.toJSON插件来进行转化
        *  $.ajax本身注意的问题:
              contentType: "application/json"这项配置说是传递的是json,必须要写

3.jar包:除了struts2的基本jar包外,再加struts2-json-plugin-2.3.15.1.jar和struts2-junit-plugin-2.3.15.1.jar

测试负责数据的js

$().ready(function(){
	$("input[type='button']").unbind("click");
	$("input[type='button']").bind("click",function(){
		/**
		 * 对于复杂数据,例如数组,$.post传递数据是不行的
		 */
//		$.post("testAjax2","{'bb':[1,2,3]}",function(data){
//			alert(data);
//		});//复杂类型的json数据
 		var param = {
			id:'1',
			username:'xxc',
			arrayInt:[2,3,6,8],
			arrayList:[20,21,23],
			teacher:{
				tname:'aaa',
				tid:22,
				strs:['HELLO','WORLD']
			},
			teacherList:[
				{
					tname:'张三',
					tid:'1',
					strs:['a','b']
				},{
					tname:'李四',
					tid:'2',
					strs:['c','d']
				}
			]
		};
		$.ajax({
			url:"../testAjax2.action",
			type:"POST",
			data:"{'bb':[5,6,7,8,9,10]}",//这里必须key加'' 中括号外边再加"",否则struts2不认,所以每次这样拼接很麻烦
			success:function(){
				alert("aaaaaa");
			},
			contentType:'application/json',
			error:function(){
				alert("bbbbbb");
			}
		});
		//param = $.toJSON(param);
//		$.ajax({
//			url:"../testMoreJson.action",
//			type:"POST",
//			data:param,
//			success:function(){
//				alert("aaaaaa");
//			},
//			contentType:'application/json',
//			error:function(){//这个函数是根据服务器的status来进行调用的,struts2出错后不会自动设置status错误状态码
//				alert("bbbbbb");
//			}
//		});
		
	});
});

Action(json数据的key要和action里的属性对应才action能取值,action传递给前台的,用data.属性名取值)

public class TestMoreJson extends ActionSupport implements Serializable {
	private String id;
	private String username;
	private Integer[] arrayInt;
	private List<Integer> arrayList;
	private List<Teacher> teacherList;
	
	public String execute(){
		try {
			int i = 1/0;
		} catch (Exception e) {
			ServletActionContext.getResponse().setStatus(500);//手动设置服务器返回的状态码
			e.printStackTrace();
		}
		return SUCCESS;
	}
//省略get和set方法
}

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<!-- 使用简单主题 -->
    <constant name="struts.ui.theme" value="simple"/> 
    <!-- 自动加载 -->
    <constant name="struts.devMode" value="true" />
    <package name="testAjax" extends="json-default">
    	<interceptors>
    		<interceptor-stack name="ajaxStack">
    			<interceptor-ref name="defaultStack"></interceptor-ref>
    			<interceptor-ref name="json"></interceptor-ref>
    		</interceptor-stack>
    	</interceptors>
    	<default-interceptor-ref name="ajaxStack"/>
    	<action name="testMoreJson" class="com.xxc.action2.TestMoreJson">
    		<result type="json"></result>
    	</action>
    </package>
</struts>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值