目标:本周做了一个300多项的form表单查询和保存。

    思考:之前做查询和保存,用的是提交后同步跳转;这次想使用不同的方式来做;采用了ajax异步查询和保存试试。

    过程:

  1. 选择jQuery中的ajax函数和spring mvc框架,数据交互采用json形式

  2. 先写后台,类用了注解

    @Controller
    @RequestMapping("/baController")

    方法用了注解

    @RequestMapping(value="/queryba.do", produces = {"application/json;charset=UTF-8"})
    @ResponseBody
    json框架用了ali的fastjson,补充一点:默认的json中的key是小写字母,所以我设置了变量在代码里;返回json中有汉字,用到了produces里的设置;ResponseBody设置,可以直接在方法最后返回json,不用在指定dispatcher

    //设置json串中key首字母是大写
    static
    {
        TypeUtils.compatibleWithJavaBean = true;
    }   

后台写jdbc查询时,用了以下代码:

RowMapper<BaBean> rm = ParameterizedBeanPropertyRowMapper.newInstance(BaBean.class);

        try{
            BaBean ba =  (BaBean)jdbcTemplate.queryForObject(sql, rm);
            //转为json
            String strjson = JSON.toJSONString(ba);
            return strjson;  
     
            
        }catch(EmptyResultDataAccessException e){
            return "{\"result\":\"false\"}";
        }

通过很短方式,就把300多项数据组装完毕,效率还是蛮高的。spring的jdbcTemplate.queryForObject方法再拼接大数据量时,效率高。


3.验证后台没问题后,再写前台:

前台页面中工作量最大的就是标签里的300多项,咬牙写完;在查询和保存中,都用到了一些小技巧,查询后渲染页面中的值,采用json数据循环:

//查询
        $(document).ready(function(){
              $("#bq").click(function(){
                var caseid= $("#querybah").val();  
                
                 $.ajax({url:"/jmyy/baController/queryba.do?caseid="+caseid,
                         async:false,
                        dataType:"json",
                        cache: false,
                        success:function(data){
                            if(data["result"]=="false"){
                                alert("没查询出结果");
                            }else{            

                                for(var item in data){  
                                    var jValue=data[item];//key所对应的value
                                    $("#"+item).attr("value",jValue);
                                    }

                            }    
                        }
                         });

                 
                  }
              );
        });

                               

修改后保存,采用了form表单的序列化,避免了手动去遍:

    //保存
        $(document).ready(function(){
        $("#bb").click(function(){    
            
            $.ajax({
                type:"POST",
                url:"/jmyy/baController/saveba.do",
                data:$("#baform").serializeArray(),
                dataType:"json",
                cache: false,
                success:function(data){
                    alert("保存成功!");
                    //数据清空
                    window.location.reload();
                }
                });
            }
            
        );
        });