struts2整合json和ajax

1,Struts2与Ajax整合的缺点

无论采用$.post还是$.ajax都捕获不到服务器产生的错误($.ajax捕获错误在servlet能做到),是struts2内部设计的不好,不是Ajax的问题。

2,$.post()与$.ajax()大家都知道,$.post()方法与$.ajax()方法的区别:

$.post()方法:不能截获异常;

$.ajax()方法:可以截获异常;

3,需要加入jar包(struts版本下的,不同版本会报错)

json-lib-2.1-jdk15.jar

struts2-json-plugin-2.3.1.2.jar

struts2-junit-plugin-2.3.1.2.jar

----------------------------------------------------自定义结果集(struts2-ajax)---------------------------------------

1,jsp页面:
<script type="text/javascript">
	$(function(){
		coustom.inintEvent();
	});
	</script>
	<td><s:textfield name="name"></s:textfield></td>
	<td><s:label id="message"></s:label> </td>
2,js
var coustom = {
		//############################自定义结果集
		inintEvent:function(){
			$("input[name='name']").unbind("blur");
			$("input[name='name']").bind("blur", function(){
				coustom.check_coustomAction($(this).val());
			});
		},
		check_coustomAction:function(name){
			var parameter={
				'name':name
			};
			var xhl = $.post("ajaxjson_check.action", parameter, function(data){
				$("#message").text(xhl.responseText);
				if(xhl.responseText == "该用户名可以使用"){
					$("#message").css("color", "blue");
				}else{
					$("#message").css("color","red");
				}
			});
		},
		//############################struts2与json整合	
		inintEvent2:function(){
			$("input[name='name']").unbind("blur");
			$("input[name='name']").bind("blur", function(){
				coustom.check_coustomAction2($(this).val());
			});
		},
		check_coustomAction2:function(name){
			var parameter={
				'name':name
			};
			$.ajax({
				type:"POST",
				url:"ajaxjson2_check.action",
				data:parameter,
				dateType:"json",
				success:function(data){
					$("#message").text(data.message);
				},
				error:function(){
					$("#message").text("连接失败");//这里得不到提示,有错误会走模版页面
				}
			});
		}
	};
3,action
/**
	 *ajax调用 
	 */
	public String check(){
		Long l = coustomservice.findCoustom(this.model.getName());
		if (l != 0) {
			ActionContext.getContext().getValueStack().push("该用户名已占用");
		}else{
			ActionContext.getContext().getValueStack().push("该用户名可以使用");
		}
		return SUCCESS;
	}
4,AjaxAction.java
public class AjaxResutl implements Result{
		@Override
		public void execute(ActionInvocation arg0) throws Exception {
			HttpServletResponse response = ServletActionContext.getResponse();
			response.setCharacterEncoding("utf-8");
			String message = ActionContext.getContext().getValueStack().peek().toString();
			response.getWriter().print(message);
		}
	}
5,struts.xml
<package name="ajax" namespace="/" extends="all">
		<result-types>
			<result-type name="ajaxResult" class="ssh.action.sturts2jsonajax.AjaxResutl"></result-type>
		</result-types>
	</package>
	<package name="Coustom" namespace="/" extends="all">
		<action name="customAction_*" class="ssh.action.sturts2jsonajax.CustomAction" method="{1}">
			<result name="toAddUI">/jsp/struts2jsonajax/coustomadd.jsp</result>
		</action>
	</package>
	<!-- result 中的type对应package中ajax的result -->
	<package name="ajaxjson" namespace="/" extends="ajax">
		<action name="ajaxjson_*" class="ssh.action.sturts2jsonajax.CustomAction" method="{1}">
			<result type="ajaxResult"></result>
		</action>
	</package>
-----------------------------------------------(struts2-ajax-json)-------------------------------------------------------

Stringmessage加到javabeancoustom中,这个字段不需和数据库字段关联,临时的ajax获取信息。

(一般通过get,set就行了,这个系统中不行,原因,未知)

1,jsp
<script type="text/javascript">
	$(function(){
		coustom.inintEvent2();
	});
	</script>
2,js

同上

3,action
/**
	 *ajax调用 
	 */
	public String check(){
		try {
//			int a = 1/0;
			Long l = coustomservice.findCoustom(model.getName());
			if (l != 0) {
				model.setMessage("该用户已被占用");
//				ActionContext.getContext().getValueStack().push(message);
			}else{
				model.setMessage("该用户可以使用");
//				ActionContext.getContext().getValueStack().push(message);
			}
		} catch (Exception e) {
//			model.setMessage("查询异常!");
			model.setMessage(e.toString());
		}
		return SUCCESS;
	}
4,struts.xml
<package name="Coustom2" namespace="/" extends="all">
		<action name="customAction2_*" class="ssh.action.sturts2jsonajax.CustomAction2" method="{1}">
			<result name="toAddUI2">/jsp/struts2jsonajax/coustomadd2.jsp</result>
		</action>
	</package>
	<package name="coustom2_json" namespace="/" extends="json-default">
		<action name="ajaxjson2_*" class="ssh.action.sturts2jsonajax.CustomAction2" method="{1}">
			<result type="json"></result>
		</action>
	</package>

相关推荐