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>
相关推荐
kentrl 2020-11-10
结束数据方法的参数,该如何定义?-- 集合为自定义实体类中的结合属性,有几个实体类,改变下标就行了。<input id="add" type="button" value="新增visitor&quo
ajaxyan 2020-11-09
zndy0 2020-11-03
学留痕 2020-09-20
Richardxx 2020-11-09
learningever 2020-09-19
chongxiaocheng 2020-08-16
ajaxhe 2020-08-16
lyqdanang 2020-08-16
curiousL 2020-08-03
TONIYH 2020-07-22
时光如瑾雨微凉 2020-07-19
83510998 2020-07-18
坚持着执着 2020-07-16
jiaguoquan00 2020-07-07
李永毅 2020-07-05
坚持着执着 2020-07-05