最近为了准备新工作重新摸出了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框架的增删改查的模块后总结的问题的更多相关文章

  1. ssm 框架实现增删改查CRUD操作(Spring + SpringMVC + Mybatis 实现增删改查)

    ssm 框架实现增删改查 SpringBoot 项目整合 一.项目准备 1.1 ssm 框架环境搭建 1.2 项目结构图如下 1.3 数据表结构图如下 1.4 运行结果 二.项目实现 1. Emplo ...

  2. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

  3. tp框架的增删改查

    首先,我们来看一下tp框架里面的查询方法: 查询有很多种,代码如下: <?php namespace Admin\Controller; use Think\Controller; class ...

  4. Yii2.0高级框架数据库增删改查的一些操作(转)

    yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2.0高级框架数据库增删改查的一些操作 --------------------------- ...

  5. Yii2.0高级框架数据库增删改查的一些操作

    yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2.0高级框架数据库增删改查的一些操作 --------------------------- ...

  6. FoxOne---一个快速高效的BS框架--生成增删改查

    FoxOne---一个快速高效的BS框架--(1) FoxOne---一个快速高效的BS框架--(2) FoxOne---一个快速高效的BS框架--(3) FoxOne---一个快速高效的BS框架-- ...

  7. Entity - 使用EF框架进行增删改查 - 模型先行

    模型先行:先创建数据库实体模型,然后再进行数据库的增删改查. 基本步骤是不变的,可参照 <Entity - 使用EF框架进行增删改查 - 数据库先行> 其中的不同是,在创建数据库实体模型的 ...

  8. 上手spring boot项目(三)之spring boot整合mybatis进行增删改查

    使用mybatis框架进行增删改查大致有两种基础方式,一种扩展方式.两种基础方式分别是使用xml映射文件和使用方法注解.扩展方式是使用mybatis-plus的方式,其用法类似于spring-data ...

  9. 基于SpringBoot开发一个Restful服务,实现增删改查功能

    前言 在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练. ...

随机推荐

  1. 读取本地IP地址和子网页码

    #region 读取本地IP地址和子网页码 //读取本地IP地址和子网页码 NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterf ...

  2. 查询SQL Version详细信息

    下面是一个查询SQL Server版本并给出升级建议的SQL代码,用来学习写SQL代码. ------------------------------------------------------- ...

  3. 沉淀再出发:IoC和AOP的本质

    沉淀再出发:IoC和AOP的本质 一.前言 关于IoC和AOP这两个概念,如果我们没有深入的理解可以说是根本就不理解Spring这个架构的,同样的由Spring演变出来的Spring Boot和Spr ...

  4. 沉淀再出发:mongodb的使用

    沉淀再出发:mongodb的使用 一.前言 这是一篇很早就想写却一直到了现在才写的文章.作为NoSQL(not only sql)中出色的一种数据库,MongoDB的作用是非常大的,这种文档型数据库, ...

  5. PHP面试常用算法(推荐)

    一.冒泡排序 基本思想: 对需要排序的数组从后往前(逆序)进行多遍的扫描,当发现相邻的两个数值的次序与排序要求的规则不一致时,就将这两个数值进行交换.这样比较小(大)的数值就将逐渐从后面向前面移动. ...

  6. linux man指令问题

    linux man指令问题 2010-1-13 13:33 提问者: 钟离伊轩 man命令执行时,可加入数值,来限制帮助级别. 这句话对不对啊???? 我记得man page是分章节的..好像可以加数 ...

  7. Foj 2296 Alice and Bob(博弈、搜索)

    Foj 2296 Alice and Bob 题意 两个人博弈,规则如下:轮流取0~9中的数字,最后Alice所得的数字个数为1~n中,数位在Alice所取集合中出现奇数次的. 双方想获得尽量多,问A ...

  8. JAVAWEB之文件的上传下载

    文件上传下载 文件上传: 本篇文章使用的文件上传的例子使用的都是原生技术,servelt+jdbc+fileupload插件,这也是笔者的习惯,当接触到某些从未接触过的东西时,总是喜欢用最原始的东西将 ...

  9. Java并发案例04---Future和 FutureTask

    4.Future和 FutureTask 4.1 Future是Callable的返回结果. 它有三个功能 1.判断任务是否完成 2.能够中断任务 3.能够获取任务返回结果 4.2 FutureTas ...

  10. Java并发案例02---生产者消费者问题

    package example; import java.util.LinkedList; import java.util.concurrent.TimeUnit; public class MyC ...