为什么要回显数据?或者说什么是回显数据?
回显就是对指定数据的修改,先完全展示其信息,才方便修改。其实就是获取到用户点击数据的id,根据id将其内容使用jsp进行输出。像下面,就是取到了三只松鼠的id,对他进行展示。
难点:确定id
大体实现步骤:写接口–写SQL–写service层代码–用户点击一条数据进行修改(a标签)–拿到id,跳转到servlet–调用selectById方法,参数是id–接收到对象–传到展示的jsp界面。其实就比平常多了一个最后的展示环节。
一共分为:4个步骤
mybatis部分
接口:
//根据id查询
Brand selectByIdBrand(int id);
sql:
<!-- 根据id查询-->
<select id="selectByIdBrand" resultMap="BrandResultMap">
select * from tb_brand
where id = #{id}
</select>
二、service部分
// 根据id查询
public Brand SelectById(int id){
//获取sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//调用getMapper
BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
//调用接口方法
Brand brand = mapper.selectByIdBrand(id);
//关闭连接
sqlSession.close();
return brand;
}
三、确定用户点击的id是那一条并传入servlet
①确定id的关键代码:
<a href="SelectByIdServlet?id=${brand.id}" class="btn btn-sm btn-primary mr-3">修改</a>
打个问好,写个id,这样即可跳转到servlet,又可以把id带过去,很受启发。之后用户点击每一条都可以进行跳转,接下来就是servlet部分,这一部分基本就回到正轨-----调方法,得对象。
②获取该id对应的对象值并将其转发到展示界面
package com.fldwws.web;
import com.fldwws.pojo.Brand;
import com.fldwws.service.BrandService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/SelectByIdServlet")
public class SelectByIdServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//接收id值
String id = req.getParameter("id");
//调用service方法
BrandService brandService = new BrandService();
Brand brand = brandService.SelectById(Integer.parseInt(id));
//存储到request域中
req.setAttribute("brand",brand);
//转发
// resp.sendRedirect("/update.jsp");
req.getRequestDispatcher("/update.jsp").forward(req,resp);
}
}
展示数据
展示的关键就是将input标签中的
value
值写进去。
还有一个就是id也需要存进去,这里需要采用隐藏式提交
。
最后一个就是用户的radio表达需要先判断再进行输出
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html lang="en">
<head>
<title>表单填写</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container mt-5">
<form action="ModifyServlet" method="post">
<%-- 隐藏域提交id--%>
<input type="hidden" name="id" value="${brand.id}">
品牌名称:<input name="brandName" class="form-control" value="${brand.brandName}">
企业名称:<input name="companyName" class="form-control" value="${brand.companyName}">
价格: <input name="ordered" class="form-control" value="${brand.ordered}">
描述:<textarea name="description" rows="5" cols="20" class="form-control">${brand.description}</textarea>
状态:
<c:if test="${brand.status == 1}">
<input type="radio" name="status" value="1" class="mt-4" checked>启用
<input type="radio" name="status" value="0" >禁用<br>
</c:if>
<c:if test="${brand.status == 0}">
<input type="radio" name="status" value="1" class="mt-4" >启用
<input type="radio" name="status" value="0" checked>禁用<br>
</c:if>
<button class="btn btn-primary " type="submit ">提交</button>
</form>
</div>
</body>
</html>