当前位置: 移动技术网 > IT编程>开发语言>Jquery > 【项目笔记】完成一个基于SSM框架的增删改查的模块后总结的问题

【项目笔记】完成一个基于SSM框架的增删改查的模块后总结的问题

2018年12月12日  | 移动技术网IT编程  | 我要评论

最近为了准备新工作重新摸出了ssm框架,同时从0学习了jquery,终于用一周做完了一个包括增删改查的模块(主要是属性太多了,其中一个类50+,复制粘贴耗时)。

从中特意记下了几个遇到的问题,总结一下。

 

1. 执行网页js代码时, 出现$ is not defined错误。

原因:未引入jquery,需要在html代码中加入以下代码:

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

 

2. 通过ajax向ssm的后台传递一个map转json的数据时,无法调用方法request.getparameter(name)来获取属性名称。

原因:具体见:https://blog.csdn.net/u010648555/article/details/79084466

将代码做如下修改即可成功:

$.ajax({
    url:selecturl,
    type:'post',
    data:datamap, //而不是json.stringify(datamap)
    contenttype: "application/x-www-form-urlencoded", //而不是"application/json"
    success: function(data) {
        if(data.success) {
            alert('提交成功!');
        } else {
            alert('提交失败!' + data.errmsg);
        }
    }
}); 

 

3. 页面输入的中文传到后台变成了乱码。

原因:数据库和网页需要统一utf-8的编码。将问题2中的代码改为以下即可:

contenttype: "application/x-www-form-urlencoded; charset=utf-8",

 

4. 由于有动态、异步插入<option>的需求,同时有“增加新情况”的需求,需要等动态加载完选项后保存下可增项的html代码,以便在按下“增加”按钮后添加在页面上。

解决:1. 每当一个<select>加载完后,更新一次可增项的html代码。

   2. 使用$.when()方法(http://www.runoob.com/jquery/misc-when.html),如下例子:

//获取html
var addhtml = '';
$.when(getlist1(), getlist2()).done(function() {
    addhtml= '<div class="item">' + $('.item').html() + '</div>';
});

//更新属性1
function getlist1() {
    var initurl = '/getattr1';
    return getattrlist(initurl, 'attr1');
}

//更新属性2
function getlist2() {
    var initurl = '/getattr2';
    return getattrlist(initurl, 'attr2');
}

function getattrlist(url, idname) {
    return $.getjson(url, function(data) {
                  if(data.success) {
                      var temphtml = '';
                      data.info.map(function(attr, index) {
                          temphtml += '<option class="text-style" value="' + attr.attrid+ '">' + attr.attrval+ '</option>';
                      });
                      $('#' + idname).html(temphtml);
                  } else {
                   $.toast(data.errmsg);
                  }
              });
}

 

 5. 前端向后端传递参数时,@requestbody不能放多个不同的对象。

解决:可以把这些对象封装起来,比如:

public class allattrs {
    private attr1 attr1;
    private list<attr2> attr2list;
    private list<attr3> attr3list;

    //get/set方法略
}
public class attrcontroller {
    @requestmapping(value = "updateattr", method = requestmethod.post)
    @responsebody
    private map<string, object> updateattr(@requestbody allattrs allattrs) {
        map<string, object> modelmap = new hashmap<>();
        //处理代码略
        return modelmap;
    }
}

 

6. 如果更新项有“更新时间”这一属性,且要求“没有更新内容的时候需要特别提示”,update的时候需要注意。

更新时前端不会向后端传递更新时间,如果将更新时间设定为null或者取当前时间,那么update后会返回1,无法判断有没有更新内容。

因此设计sql的时候,类似这样的属性变量要判断是否为空(加<if>标签),如果不为空才更新这个属性。

 

7. mybatis中,保持原值不变,update后返回值不为0。

原因:mybatis返回的是匹配值而不是影响值,如果需要影响值,在jdbc.properties中需要加上“&useaffectedrows=true”。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网