修改门店信息
- 0.修改功能概述
- 1.创建控制层创建doorInfo方法,根据id查询,
- 2.如何在door_update.jsp中接收到服务器传过来的参数? ${door.xxx}
- 3.在door_update.jsp的form表单点击提交后,跳转到真正的修改方法里,
- 4.在控制类写根据id修改门店的方法,此时获取的door对象,为查询时封装好返回的door.
- 5.点击dao.updateById( door );在DoorMapper接口自动生成updateById(door)方法
- 6.在DoorMapper.xml中写根据id修改门店信息的sql语句
- 接口DoorMapper.java
- DoorMapper.xml
- 控制类DoorController.java
- 更新界面door_update.jsp
- 查询结果界面door_list.jsp
0.修改功能概述
修改功能不是只有修改,在点击修改后
1.先跳出点击id的查询结果显示在jsp界面
2.然后修改文本框的内容可供修改
3.最后修改完点击提交按钮,将信息传给服务器
技术难点:如何让查询时候的id到跳转到更新界面继续根据这个id修改数据?
1.创建控制层创建doorInfo方法,根据id查询,
记录下传给服务器的id,
再将查询结果封装给door对象,
再利用model.addAttribute方法把door放到域中,
最后跳转到门店修改界面door_update.jsp
/*4.根据id查询门店
* 将查询到的门店信息带到门店修改页面,进行数据回显
*/
@RequestMapping("/doorInfo")
public String doorInfo(Integer id,Model model){
//调用DoorMapper的findById方法,根据id查询门店信息
Door door = dao.findById( id );
//将门店信息带回门店修改界面进行回显
model.addAttribute("door",door);
//转发到门店修改界面
return "door_update";
}
2.如何在door_update.jsp中接收到服务器传过来的参数? ${door.xxx}
2.1小技巧:如何让传过来的id值不显示,但是到修改时照样可以用?
hidden标签:,偷偷摸摸加载,但不显示.
<form action="doorUpdate" method="POST">
<!-- hidden隐藏域,在提交表单时连door.id一起提交 -->
<input type="hidden" name="id" value="${ door.id }"/>
<table border="1">
<tr>
<td width="30%">门店名称</td>
<td>
<input type="text" name="name" value="${ door.name }"/>
</td>
</tr>
<tr>
<td>联系电话</td>
<td>
<input type="text" name="tel" value="${ door.tel }"/>
</td>
</tr>
<tr>
<td>门店地址</td>
<td>
<input type="text" name="addr" value="${ door.addr }"/>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="提 交" />
</td>
</tr>
</table>
</form>
3.在door_update.jsp的form表单点击提交后,跳转到真正的修改方法里,
4.在控制类写根据id修改门店的方法,此时获取的door对象,为查询时封装好返回的door.
/*5.根据id修改门店信息*/
@RequestMapping("/doorUpdate")
public String doorUpdate(Door door){
//调用DoorMapper的updateById方法,根据id修改门店信息
dao.updateById( door );
//跳转到查询所有门店的方法
return "forward:/doorList";
}
5.点击dao.updateById( door );在DoorMapper接口自动生成updateById(door)方法
/** 5.根据id修改门店信息*/
public void updateById(Door door);
6.在DoorMapper.xml中写根据id修改门店信息的sql语句
<!--5.根据id修改门店信息,id值等于方法名 -->
<update id="updateById">
update tb_door set name=#{name},tel=#{tel},addr=#{addr}
where id=#{id}
</update>
接口DoorMapper.java
<?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">
<!-- 门店表的映射文件 namespace值为对应接口的全路径 -->
<mapper namespace="com.tedu.dao.DoorMapper">
<!-- 1.查询所有门店信息,id值为对应接口中方法的名字 resultType指定将查询的结果封装到哪个pojo对象中 -->
<select id="findAll" resultType="com.tedu.pojo.Door">
select * from tb_door
</select>
<!--2.根据id删除门店信息 -->
<delete id="deleteById">
delete from tb_door where id=#{id}
</delete>
<!--3.添加门店信息 -->
<insert id="add">
insert into tb_door values(null,#{name},#{tel},#{addr})
</insert>
<!--4.根据id查询信息 -->
<select id="findById" resultType="com.tedu.pojo.Door">
select * from tb_door where id = #{id}
</select>
<!--5.根据id修改门店信息,id值等于方法名 -->
<update id="updateById">
update tb_door set name=#{name},tel=#{tel},addr=#{addr}
where id=#{id}
</update>
</mapper>
DoorMapper.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">
<!-- 门店表的映射文件 namespace值为对应接口的全路径 -->
<mapper namespace="com.tedu.dao.DoorMapper">
<!-- 1.查询所有门店信息,id值为对应接口中方法的名字 resultType指定将查询的结果封装到哪个pojo对象中 -->
<select id="findAll" resultType="com.tedu.pojo.Door">
select * from tb_door
</select>
<!--2.根据id删除门店信息 -->
<delete id="deleteById">
delete from tb_door where id=#{id}
</delete>
<!--3.添加门店信息 -->
<insert id="add">
insert into tb_door values(null,#{name},#{tel},#{addr})
</insert>
<!--4.根据id查询信息 -->
<select id="findById" resultType="com.tedu.pojo.Door">
select * from tb_door where id = #{id}
</select>
<!--5.根据id修改门店信息,id值等于方法名 -->
<update id="updateById">
update tb_door set name=#{name},tel=#{tel},addr=#{addr}
where id=#{id}
</update>
</mapper>
控制类DoorController.java
package com.tedu.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import com.tedu.dao.DoorMapper;
import com.tedu.pojo.Door;
/*@Controller:(1)表示当前类属于controller层
* 标识当前类的对象的创建由spring容器负责
*/
@Controller
public class DoorController {
/** 自动装配:由spring自动为属性赋值(对象)
* spring的核心配置稳文件中配置过自动扫描包,程序执行时,
* 框架底层会扫描所有mapper接口,为接口提供提供子类并根据子类创建实例
* 即接口的子类实例,@Autowired可以根据接口的类型到spring容器中获取
* 接口的子类实例,并赋值给dao
*
* */
@Autowired
private DoorMapper dao;
/*1.查询所有门店的信息*/
@RequestMapping("/doorList")
public String doorList( Model model ){
//调用DoorMapper的findAll方法查询所有门店信息
List<Door> list = dao.findAll();
//将门店集合存入到Model中
model.addAttribute("list", list);
//跳转到门店(door_list.jsp)页面(在该页面中展示所有门店信息)
return "door_list";
}
/*2.根据id删除门店信息*/
@RequestMapping("/doorDelete")
public String doorDelete(Integer id){
//调用DoorMapper的deleteById方法,根据id删除门店信息
dao.deleteById( id );
//删除成功后
return "forward:/doorList"; //跳转到门店列面页面
}
/*3.添加门店信息
* 接收客户端传过来的信息(name,tel,addr)
* 跳转到查询所有门店的方法,显示最新的门店信息
* */
@RequestMapping("/doorAdd")
public String doorAdd(Door door){
dao.add( door );
return "forward:/doorList";
}
/*4.根据id查询门店
* 将查询到的门店信息带到门店修改页面,进行数据回显
*/
@RequestMapping("/doorInfo")
public String doorInfo(Integer id,Model model){
//调用DoorMapper的findById方法,根据id查询门店信息
Door door = dao.findById( id );
//将门店信息带回门店修改界面进行回显
model.addAttribute("door",door);
//转发到门店修改界面
return "door_update";
}
/*5.根据id修改门店信息*/
@RequestMapping("/doorUpdate")
public String doorUpdate(Door door){
//调用DoorMapper的updateById方法,根据id修改门店信息
dao.updateById( door );
//跳转到查询所有门店的方法
return "forward:/doorList";
}
/** 声明一个页面跳转方法,通过访问jsp的名字可以跳转到/WEB-INF/pages/下面指定名字的jsp页面
* 其中{}的jspName 用于接收访问的路径名,例如:
* 例如:访问路径为 "/index",则方法最后返回的值为:"index"
* 即最终返回 /WEB-INF/pages/index.jsp
* 此时,jspName的值就是index
* 再将{}中jspName的值传递给方法上的形参jspName,值也为jspName
* 然后 形参jspName的值传给return上的jspName
* 最终跳转到对应的jap界面
*
*/
/*测试3:跳转对应jsp的通用方法*/
@RequestMapping("/{jspName}")
public String page(@PathVariable String jspName){
return jspName;
}
/* 原始跳转方法
* @RequestMapping("/index")
public String index(){
return "index"; //跳转到_top.jsp
}*/
/*测试2:测试ssm的运行环境*/
//@RequestMapping("/testssm")
public String testssm(){
System.out.println("DoorController.testssm()...");
List<Door> list = dao.findAll();
for(Door door:list){
System.out.println(door);
}
return "test";
}
/*测试1:测试springmvc的运行环境*/
@RequestMapping("/hello")
public String hello(){
System.out.println("DoorController.hello()...");
return "test";
}
}
更新界面door_update.jsp
<%@ page pageEncoding="utf-8"%>
<!DOCTYPE HTML>
<html>
<head>
<title>修改门店</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<style type="text/css">
body{ font-family: "微软雅黑"; background-color: #EDEDED; }
h2{ text-align: center;font-size:26px; }
table{ margin: 30px auto; text-align: center; border-collapse:collapse; width:50%; }
td, th{ padding: 7px;font-size:18px;}
hr{ margin-bottom:20px; border:1px solid #aaa; }
input,select,textarea{ width:284px; height:30px; background:#EDEDED; border:1px solid #999; text-indent:5px; font-size:18px; }
input[type='submit']{ width:130px; height:36px; cursor:pointer; border-radius:5px 5px 5px 5px; background:#ddd; }
select{text-indent:0px;}
textarea{height:100px;font-size:22px;}
</style>
<script type="text/javascript">
</script>
</head>
<body>
<h2>修改门店</h2>
<hr/>
<form action="doorUpdate" method="POST">
<!-- hidden隐藏域,在提交表单时连door.id一起提交 -->
<input type="hidden" name="id" value="${ door.id }"/>
<table border="1">
<tr>
<td width="30%">门店名称</td>
<td>
<input type="text" name="name" value="${ door.name }"/>
</td>
</tr>
<tr>
<td>联系电话</td>
<td>
<input type="text" name="tel" value="${ door.tel }"/>
</td>
</tr>
<tr>
<td>门店地址</td>
<td>
<input type="text" name="addr" value="${ door.addr }"/>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="提 交" />
</td>
</tr>
</table>
</form>
</body>
</html>
查询结果界面door_list.jsp
<%@ page pageEncoding="utf-8"%>
<%-- 引入JSTL标签库 --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML>
<html>
<head>
<title>门店管理</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<style type="text/css">
body {
font-family: "微软雅黑";
background-color: #EDEDED;
}
h2 {
text-align: center;
}
table {
width: 96%;
margin: 0 auto;
text-align: center;
border-collapse: collapse;
font-size: 16px;
}
td, th {
padding: 5px;
}
th {
background-color: #DCDCDC;
width: 120px;
}
th.width-40 {
width: 40px;
}
th.width-70 {
width: 70px;
}
th.width-80 {
width: 80px;
}
hr {
margin-bottom: 20px;
border: 1px solid #aaa;
}
#add-door {
text-align: center;
font-size: 20px;
}
</style>
<script type="text/javascript">
</script>
</head>
<body>
<h2>门店管理</h2>
<div id="add-door">
<a href="door_add" target="rightFrame">新增门店</a>
</div>
<hr />
<table border="1">
<tr>
<th class="width-40">序号</th>
<th>门店名称</th>
<th class="width-80">联系电话</th>
<th>门店地址</th>
<th class="width-80">操 作</th>
</tr>
<!-- 模版数据 -->
<!-- door.getName = door.name
varStatus: 表示集合中每个元素的相关信息,有4种状态:
index(所在位置,即索引) .count(总共已迭代的次数)
.first(是否为第一个位置) last(是否为最后一个位置)
-->
<c:forEach items="${ list }" var="door" varStatus="status">
<tr>
<td>${ status.count }</td>
<td>${ door.name }</td>
<td>${ door.tel }</td>
<td>${ door.addr }</td>
<td><a href="doorDelete?id=${ door.id }">删除</a>
|
<a href="doorInfo?id=${ door.id }">修改</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>