SpringMVC实战--构建学生管理系统(14)
(源代码见仓库:https://gitee.com/jianghao233/course)
利用 Ajax 技术 避免提交数据库中已存在数据
(解决后台验证数据库数据与中文乱码问题)
修改 TbCourseMapper.java
package com.neuedu.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.neuedu.po.TbCourse;
public interface TbCourseMapper {
int deleteByPrimaryKey(Integer courseid);
int insert(TbCourse record);
int insertSelective(TbCourse record);
TbCourse selectByPrimaryKey(Integer courseid);
int updateByPrimaryKeySelective(TbCourse record);
int updateByPrimaryKey(TbCourse record);
public List<TbCourse> getList(@Param("start") int start,@Param("record")int record);
public int getCount();
public TbCourse getCourseByName(@Param("coursename") String coursename); //新增代码
}
修改 TbCourseMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.neuedu.mapper.TbCourseMapper" >
<resultMap id="BaseResultMap" type="com.neuedu.po.TbCourse" >
<id column="courseid" property="courseid" jdbcType="INTEGER" />
<result column="coursename" property="coursename" jdbcType="VARCHAR" />
<result column="hour" property="hour" jdbcType="INTEGER" />
<result column="score" property="score" jdbcType="DOUBLE" />
<result column="picurl" property="picurl" jdbcType="VARCHAR" />
</resultMap>
<sql id="Base_Column_List" >
courseid, coursename, hour, score, picurl
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from tb_course
where courseid = #{courseid,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
delete from tb_course
where courseid = #{courseid,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.neuedu.po.TbCourse" >
insert into tb_course (courseid, coursename, hour,
score, picurl)
values (#{courseid,jdbcType=INTEGER}, #{coursename,jdbcType=VARCHAR}, #{hour,jdbcType=INTEGER},
#{score,jdbcType=DOUBLE}, #{picurl,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" parameterType="com.neuedu.po.TbCourse" >
insert into tb_course
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="courseid != null" >
courseid,
</if>
<if test="coursename != null" >
coursename,
</if>
<if test="hour != null" >
hour,
</if>
<if test="score != null" >
score,
</if>
<if test="picurl != null" >
picurl,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="courseid != null" >
#{courseid,jdbcType=INTEGER},
</if>
<if test="coursename != null" >
#{coursename,jdbcType=VARCHAR},
</if>
<if test="hour != null" >
#{hour,jdbcType=INTEGER},
</if>
<if test="score != null" >
#{score,jdbcType=DOUBLE},
</if>
<if test="picurl != null" >
#{picurl,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.neuedu.po.TbCourse" >
update tb_course
<set >
<if test="coursename != null" >
coursename = #{coursename,jdbcType=VARCHAR},
</if>
<if test="hour != null" >
hour = #{hour,jdbcType=INTEGER},
</if>
<if test="score != null" >
score = #{score,jdbcType=DOUBLE},
</if>
<if test="picurl != null" >
picurl = #{picurl,jdbcType=VARCHAR},
</if>
</set>
where courseid = #{courseid,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.neuedu.po.TbCourse" >
update tb_course
set coursename = #{coursename,jdbcType=VARCHAR},
hour = #{hour,jdbcType=INTEGER},
score = #{score,jdbcType=DOUBLE},
picurl = #{picurl,jdbcType=VARCHAR}
where courseid = #{courseid,jdbcType=INTEGER}
</update>
<select id="getList" resultType="TbCourse">
select * from tb_course limit #{start},#{record}
</select>
<select id="getCount" resultType="int">
select count(*) from tb_course
</select>
<select id="getCourseByName" resultType="TbCourse"> //新增代码
select * from tb_course where coursename = #{coursename}
</select> //新增代码
</mapper>
修改 CourseService.java
package com.neuedu.service;
import java.util.List;
import com.neuedu.po.TbCourse;
import com.neuedu.vo.PageBean;
public interface CourseService {
void save(TbCourse tbCourse);
TbCourse getCourseById(Integer courseid);
void getList(PageBean<TbCourse> pageBean);
void update(TbCourse tbCourse);
void delete(Integer courseid);
int getCount();
TbCourse getCourseByName(String coursename); //新增代码
}
修改 CourseServiceImpl.java
package com.neuedu.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.neuedu.commons.Commons;
import com.neuedu.mapper.TbCourseMapper;
import com.neuedu.po.TbCourse;
import com.neuedu.service.CourseService;
import com.neuedu.vo.PageBean;
@Service
public class CourseServiceImpl implements CourseService {
@Autowired
private TbCourseMapper courseMapper;
@Override
public void save(TbCourse tbCourse) {
courseMapper.insertSelective(tbCourse);
}
@Override
public void getList(PageBean<TbCourse> pageBean) {
//通过计算计算出从第几条开始查询
int start = (pageBean.getNowPage() - 1) * pageBean.getRecord();
List<TbCourse> list = courseMapper.getList(start,pageBean.getRecord());
pageBean.setList(list);
int count = courseMapper.getCount(); //总记录数
pageBean.setCount(count);
}
@Override
public TbCourse getCourseById(Integer courseid) {
return courseMapper.selectByPrimaryKey(courseid);
}
@Override
public void update(TbCourse tbCourse) {
courseMapper.updateByPrimaryKeySelective(tbCourse);
}
@Override
public void delete(Integer courseid) {
courseMapper.deleteByPrimaryKey(courseid);
}
@Override
public int getCount() {
return courseMapper.getCount();
}
@Override //新增代码
public TbCourse getCourseByName(String coursename) {
return courseMapper.getCourseByName(coursename);
} //新增代码
}
修改 courseAdd.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>课程添加</title>
</head>
<body>
<div id="form-div">
<form action="${pageContext.request.contextPath}/course/save" method="post" enctype="multipart/form-data">
<!-- 有文件上传必须将enctype设为multipart -->
课程名称:<input type="text" id='coursename'name="coursename" onchange="checkCoursename()"/>
<span id="coursenamespan"></span><br />
课程学时:<input type="text" name="hour"/><br />
课程学分:<input type="text" name="score"/><br />
<input type="submit" value="提交" />
</form>
</div>
</body>
</html>
<script type="text/javascript" src="${pageContext.request.contextPath }/static/js/jquery.js"></script>
<script type="text/javascript">
function checkCoursename(){ //新增代码
//通过jquery的post方法发送ajax请求
//该方法中有四个参数,1:请求的url地址 2:要传递的参数 3:回调函数 4:从controller中返回数据的格式
var coursename = $('#coursename').val();
$.post('${pageContext.request.contextPath }/course/checkByName',{coursename:coursename},function(data){
$('#coursenamespan').html(data);
},'html'); //新增代码
}
</script>
修改 CourseController.java
package com.neuedu.controller;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.neuedu.commons.Commons;
import com.neuedu.po.TbCourse;
import com.neuedu.service.CourseService;
import com.neuedu.vo.PageBean;
import com.sun.javafx.css.CssError.InlineStyleParsingError;
@Controller
@RequestMapping("/course")
public class CourseController {
@Autowired
private CourseService courseService;
@RequestMapping({"/","/list"})
public String list(@RequestParam(value="nowPage",required=false,defaultValue="1")
Integer nowPage,Model model) {
//查询课程列表
PageBean<TbCourse> pageBean = new PageBean<>(nowPage,Commons.RECORD);
courseService.getList(pageBean);
model.addAttribute("pageBean", pageBean);
return "admin/courseManager";
}
///显示添加页面
@RequestMapping("/showAdd")
public String showAdd() {
return "admin/courseAdd";
}
@RequestMapping("/checkByName") //新增代码
@ResponseBody
public String checkByName(String coursename) {
TbCourse courseByName = courseService.getCourseByName(coursename);
if(courseByName != null) {
return "the course name is exists";
}
return "";
} //新增代码
//保存课程信息
@RequestMapping("/save")
public String save(TbCourse tbCourse) {
/*TbCourse courseByName = courseService.getCourseByName(tbCourse.getCoursename());
if(courseByName != null) {
return "admin/courseAdd";
}*/
//调用service保存课程信息
courseService.save(tbCourse);
return "redirect:/course/";
}
//显示修改页面
@RequestMapping("/showModify")
public String showModify(Integer courseid,Map<String,Object> map) {
TbCourse tbCourse = courseService.getCourseById(courseid);
map.put("c", tbCourse);
return "admin/courseModify";
}
@RequestMapping("/modify")
public String modify(TbCourse tbCourse) {
courseService.update(tbCourse);
return "redirect:/course/";
}
@RequestMapping("/delete")
public String delete(Integer courseid) {
courseService.delete(courseid);
return "redirect:/course/";
}
}
输出:进入课程管理页面--点击添加---当输入数据库中已存在数据时---显示 the course name is exists
在不刷新页面的情况下,动态的改变局部信息----Ajax(解决局部刷新)
想让提示语为中文会导致乱码问题(提示语修改为 该课程名已存在 ),解决乱码问题,修改代码
修改 springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<!-- springmvc 只负责 controller层 -->
<context:component-scan base-package="com.neuedu.controller"></context:component-scan>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<mvc:annotation-driven>
<mvc:message-converters>
<!-- 消息转换器 --> //新增代码
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<!-- 将消息转换器中的属性设置为 utf-8 -->
<value>text/plain;charset=utf-8</value>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters> //新增代码
</mvc:annotation-driven>
<!-- 映射静态资源 -->
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 配置拦截路径(所有路径) -->
<mvc:mapping path="/**"/>
<!-- 配置不拦截路径(不拦截static和login下的路径) -->
<mvc:exclude-mapping path="/static/**"/>
<mvc:exclude-mapping path="/login/**"/>
<bean id="check" class="com.neuedu.interceptor.CheckInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
<mvc:resources location="/static/" mapping="/static/**"></mvc:resources>
<!-- url地址为static开头的,全部映射到 static文件夹下,里面存储静态页面的样式;
不用经过spring映射,因为spring映射会将外部网络引用的文件全部拦截 -->
<!-- 多部件文件上传解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 上传文件的最大内存为5M -->
<property name="maxUploadSize" value="5000000"></property>
<!-- 上传文件的编码格式为utf-8 -->
<property name="defaultEncoding" value="utf-8"></property>
</bean>
</beans>
输出:提示信息成功输出为中文,乱码问题解决