最近为了准备新工作重新摸出了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. Web前端和后端开发的区别和要求

    Web前端和后端开发的区别和要求 有时候自己会分不清,其实是因为前后端都了解,类似于全栈工程师,但又什么都不是很精通.那到底什么是前端.后端呢,我整理了一些企业要求级别的前端/后端基础,开发框架等. ...

  2. 计算fibonacci数(多种方法)

    #include <iostream> using namespace std; //计算fibonacci数 //方法一:二分递归法,时间复杂度为O(2^n),额外空间复杂度为常数 in ...

  3. apple 下安装mysql 以及 碰到的问题

    直接说过程: 1.从mysql 官网下载 mysql 5.7最新版:有 两种 一种是 dmg 的傻瓜包,一种是tar.gz的压缩包.我下载的是tar.gz的压缩包. 2.下载成功后,先试用命令sudo ...

  4. .net core系列之《sdk和runtime区别及使用CLI在Ubuntu上快速搭建Console,WebApi,MVC三大应用模型》

    一.需要安装的软件 1.虚拟机安装Ubuntu系统(本人用的是vmware-14.1.12和buntu-18.04) 2.Xshell或 Putty(连接ssh服务) 3.FileZilla(ftp上 ...

  5. lua垃圾回收之空表

    故事背景: 自己手动手写的一个lua外部库luaopen_xxx,采用了tolua++1.0.93,编译后得到xxx.dll,当在luajit中require 'xxx'后是正常的,但如果运行环境换成 ...

  6. ZT 线程处理函数pthread_cleanup_push / pthread_cleanup_pop

    http://bbs.csdn.net/topics/390688105 2)创建了线程,但是线程退出时没有线程调用pthread_join() 线程资源没有回收,如果持续创建线程,到一定数量后将不能 ...

  7. Java 字符流与基本IO

    字符流基类 java.io包中专门用于字符流处理的类,是以 Reader 和 Writer 为基础派生的一系列类.字符流以字符为单位,根据码表映射字符,一次可能读多个字节,只能处理字符类型的数据.Re ...

  8. 021.2 IO流——字节输出流

    内容:流的分类,文件写入(字节输出流),异常处理,获取一个文件夹下的特定文件集合 字节流的抽象基类:InputStream,OutputStream字符流的抽象基类:Reader,Writer由这四个 ...

  9. 7、Python文件操作工具 openpyxl 工具 2

    创建一个工作簿 使用openpyxl没有必要先在系统中新建一个.xlsx,我们需要做的只需要引入Workbook这个类,接着开始调用它. >>> from openpyxl impo ...

  10. iOS-建设银行破解分享

    https://i.cnblogs.com/Files.aspx 建设银行破解分享 问题描述一• 在越狱手机上控制银行客户端自动获取流水,并发送到服务器. 问题描述二• 怎么控制 • 通过在越狱手机上 ...