最近为了准备新工作重新摸出了SSM框架,同时从0学习了JQuery,终于用一周做完了一个包括增删改查的模块(主要是属性太多了,其中一个类50+,复制粘贴耗时)。
从中特意记下了几个遇到的问题,总结一下。
1. 执行网页js代码时, 出现$ is not defined错误。
原因:未引入JQuery,需要在HTML代码中加入以下代码:
< src=\"https://code.jquery.com/jquery-3.1.1.min.js\"></ >
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, > updateAttr(@RequestBody AllAttrs allAttrs) { Map<String, > modelMap = new HashMap<>(); //处理代码略 return modelMap; } }
6. 如果更新项有“更新时间”这一属性,且要求“没有更新内容的时候需要特别提示”,update的时候需要注意。
更新时前端不会向后端传递更新时间,如果将更新时间设定为null或者取当前时间,那么update后会返回1,无法判断有没有更新内容。
因此设计SQL的时候,类似这样的属性变量要判断是否为空(加<if>标签),如果不为空才更新这个属性。
7. MyBatis中,保持原值不变,update后返回值不为0。
原因:MyBatis返回的是匹配值而不是影响值,如果需要影响值,在jdbc.properties中需要加上“&useAffectedRows=true”。
继续阅读与本文标签相同的文章
大数据和AI怎么与现代教育相结合?
-
PHP还有前途吗?
2026-05-19栏目: 教程
-
Python 制作微信全家福,你就是朋友圈最亮的仔!
2026-05-19栏目: 教程
-
3年java开发竟然还不知道Lambda的这个坑
2026-05-19栏目: 教程
-
小狗分类器,你家的狗子是个什么狗?
2026-05-19栏目: 教程
-
安卓开发开发规范手册V1.0
2026-05-19栏目: 教程
