S2SH+jquery+JSON实现Ajax

直接把QQ日志搬进来,偷下懒 嘿嘿。
一、准备
  1、S2SH整合相关问题这里不做过多介绍;

  2.、引入实现Ajax相关的jar包:测试项目中所采用的Struts版本为struts2.1.8,该版本jar包中包含所需插件(json-lib-2.1.jar,struts2-json-plugin-2.1.8.1.jar),之前版本可能需要下载JSON插件;

  3、引入jquery相关JS文件;

二 、工程中实现Ajax

  这里以实现二级联动下拉菜单为例。

  1、在JSP页面中编写前端javascript:项目中使用了jquery的$.getJSON(url,params,function callback(data))函数提交ajax请求到指定url,各个参数的含义为:

   url:处理请求的地址,本工程中对应Action中的一个方法;

   params:请求参数;

   callback(data):回调函数,即接收到服务器处理结果后前端页面执行的方法,data为服务器返回的结果;

  2、Ajax请求的配置:Ajax请求类型有别于一般struts2请求,继承自json-default,返回结果类型为json,json-default和“json”的结果类型都在struts2-json-plugin-2.1.8.1.jar的struts-plugin.xml中定义;

   struts.xml中action的配置如下:

   <package name="ajax" namespace="/ajax" extends="json-default">
     <action name="getsub" class="transBfAction" method="getSubAccList">
      <result type="json">
        <param name="excludeProperties">.*hibernateLazyInitializer</param>
        <param name="root">result</param>
       </result>
  </action>
</package>

  其中,与一般action配置不同的是package 中的 extends的设置,aciton返回结果result的返回类型;result中的第一个参数是解决hibernate反射关闭的也就是实体中的属性是另外的实体的问题,有待进一步考察;第二个参数表示返回结果,其值和Action中名称须保持一致,本项目中在Action类中定义了一个名称为result的属性,在对应方法中将返回值赋值给了result;
  3、前台JSP接收请求返回结果:本工程使用了JS的eval方法将返回结果data转换成JSON对象,之后进行处理。

  下面附上JS代码和相关Action中的代码:

  JS:$(function(){
  $("#acct").change(function(){
        var URL = "/ebank/ajax/getsub.shtml";
        params = {'index':$(this).val()};
        $.getJSON(URL,params,function callback(data){
        var JSON_text = eval("("+data+")");
        var myOptions = "";
       for(var i=0;i<JSON_text.length;i++){
       myOptions +='<option value="' + JSON_text[i].optionValue +'">' + JSON_text[i].optionDisplay     + '</option>';
      }
       $("#subacct").html(myOptions)
   });
  });
  $("#acct").change();
  })

$(function(){
  $("#acct").change(function(){
      var URL = "/ebank/ajax/getsub.shtml";
      params = {'index':$(this).val()};
   $.getJSON(URL,params,function callback(data){
   var JSON_text = eval("("+data+")");
    var myOptions = "";
    for(var i=0;i<JSON_text.length;i++){
     myOptions +='<option value="' + JSON_text[i].optionValue +'">' + JSON_text[i].optionDisplay + '</option>';
    }
       $("#subacct").html(myOptions)
   });
  });
  $("#acct").change();
  })

      JS中注意params的写法, params = {'index':$(this).val()};index将''号;

  Action对应方法代码:

   public String getSubAccList() {
   String JSON_text = "";

     //获取请求参数
     String acctid = this.request.getParameter("index");

  //中间具体数据处理代码略

     ......

    //将返回结果赋值给result,与struts.xml中一致
       this.result = JSON_text;
   return SUCCESS;
}

你可能感兴趣的:(jquery,Hibernate,Ajax,json,struts)