【项目笔记】完成一个基于SSM框架的增删改查的模块后总结的问题
最近为了准备新工作重新摸出了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”。
【项目笔记】完成一个基于SSM框架的增删改查的模块后总结的问题的更多相关文章
- ssm 框架实现增删改查CRUD操作(Spring + SpringMVC + Mybatis 实现增删改查)
ssm 框架实现增删改查 SpringBoot 项目整合 一.项目准备 1.1 ssm 框架环境搭建 1.2 项目结构图如下 1.3 数据表结构图如下 1.4 运行结果 二.项目实现 1. Emplo ...
- Mysql学习笔记(三)对表数据的增删改查。
正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...
- tp框架的增删改查
首先,我们来看一下tp框架里面的查询方法: 查询有很多种,代码如下: <?php namespace Admin\Controller; use Think\Controller; class ...
- Yii2.0高级框架数据库增删改查的一些操作(转)
yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2.0高级框架数据库增删改查的一些操作 --------------------------- ...
- Yii2.0高级框架数据库增删改查的一些操作
yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2.0高级框架数据库增删改查的一些操作 --------------------------- ...
- FoxOne---一个快速高效的BS框架--生成增删改查
FoxOne---一个快速高效的BS框架--(1) FoxOne---一个快速高效的BS框架--(2) FoxOne---一个快速高效的BS框架--(3) FoxOne---一个快速高效的BS框架-- ...
- Entity - 使用EF框架进行增删改查 - 模型先行
模型先行:先创建数据库实体模型,然后再进行数据库的增删改查. 基本步骤是不变的,可参照 <Entity - 使用EF框架进行增删改查 - 数据库先行> 其中的不同是,在创建数据库实体模型的 ...
- 上手spring boot项目(三)之spring boot整合mybatis进行增删改查
使用mybatis框架进行增删改查大致有两种基础方式,一种扩展方式.两种基础方式分别是使用xml映射文件和使用方法注解.扩展方式是使用mybatis-plus的方式,其用法类似于spring-data ...
- 基于SpringBoot开发一个Restful服务,实现增删改查功能
前言 在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练. ...
随机推荐
- Docker相关连接
docker-compose文档:https://docs.docker.com/compose/compose-file/ dockerfile文档:https://docs.docker.com/ ...
- [转发]CPU个数、CPU核心数、CPU线程数
我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级.CPU从早期的单核,发展到现在的双核,多核.CPU除了核心数之外,还有线程数之说,下面文本就来解释一下CPU的核心数与 ...
- Effective C++(9) 构造函数调用virtual函数会发生什么
问题聚焦: 不要在构造函数和析构函数中调用virtual函数,因为这样的调用不会带来你预想的结果. 让我先来看一下在构造函数里调用一个virtual函数会发生什么结果 Demo class Trans ...
- 整合VIM和Graphviz,并且使用本办法实现实时预览
在编程或是整理知识的时候一直苦于没有一款可以帮助理清思路的工具. 在网上苦寻良久,终于找到了一款可心可意的小软件 —— Graphviz. 折腾了一番,终于可以凑合着用了. 现将折腾的成果记录于此以作 ...
- [EffectiveC++]item42:了解typename的双重意义
- [BZOJ 3441]乌鸦喝水
3441: 乌鸦喝水 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 374 Solved: 148[Submit][Status][Discuss] ...
- Linux命令--压缩解压(简化版)
Linux tar.gz.tar.bz2.zip 等解压缩.压缩命令详解(简化版) Linux 常用的压缩与解压缩命令有:tar.gzip.gunzip.bzip2.bunzip2.compress ...
- 怎么知道是哪个div被点击了
怎么知道是哪个div被点击了 不在div中加onclick等事件调用函数 ,用事件监听函数,但是如果div中的div被点击了,addEventListener得到了两个监听事件,我想点击div里的di ...
- boost编译
从boost官网( http://www.boost.org )上下载最新的boost版本,现在最新是1.64版本,解压到自定义目录(我解压到了E盘E:\boost_1_64_0\,最终的目录结构是E ...
- BZOJ5072:[Lydsy1710月赛]小A的树(树形DP)
Description BZOJ只是扔了个下载链接 Solution 设$f[x][i]$表示$x$点选中$i$个黑点的最小连通块. 设$g[x][i]$表示$x$点选中$i$个黑点的最大连通块. 转 ...