您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
10-案例-修改-回显数据(html属性名与属性值相同时可只写属性名)
发布时间:2024-12-04 20:21:39编辑:雪饮阅读()
-
继续上篇完成了新增品牌,这次来完成下编辑。编辑和新增其实吧,也可以在同一个jsp页面做,也可以如新增一个edit.jsp去做,这个如果是不算太复杂的,那么合并一起或许比较好。这里我是分开一个新的如update.jsp。
这里再分享一个小技巧,在extends一个父类时候,如果@Override该父类的某个方法,你直接在后面空格然后输入该方法的关键字符会自动在IntelliJ IDEA中有提示,点击你真正想要@Override的那个完整方法,会快速帮你把整个结构写出来,你只需要稍加修改即可。
那么接下来之前的BrandMapper的实现接口中先把查询单个brand的抽象接口定义如:
@Select("select * from tb_brand where id=#{id}")
@ResultMap("brandResultMap")
Brand selectById(int id);
然后brandService中进行具体的实现
public Brand selectByID(int id){
SqlSession sqlSession=sqlSessionFactory.openSession();
BrandMapper brandMapper=sqlSession.getMapper(BrandMapper.class);
Brand brand=brandMapper.selectById(id);
sqlSession.close();
return brand;
}
那么接下来我就需要建立一个servlet用于根据品牌id读取品牌数据转发到update.jsp中
这里假定该servlet的patterns的url配置如
@WebServlet("/BrandUpdateById")
那么doGet的实现如:
BrandService brandService=new BrandService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int id= Integer.parseInt(req.getParameter("id"));
Brand brand=brandService.selectByID(id);
req.setAttribute("brand",brand);
req.getRequestDispatcher("/update.jsp").forward(req,resp);
}
那么update.jsp实现如:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>修改品牌</title>
</head>
<body>
<h3>修改品牌</h3>
<form action="/threeTierArchitectureModule/BrandUpdateById?id=${brand.id}" method="POST">
品牌名称:<input name="brandName" value="${brand.brandName}"><br>
企业名称:<input name="companyName" value="${brand.brandName}"><br>
排序:<input name="ordered" value="${brand.ordered}"><br>
描述信息:<textarea rows="5" cols="20" name="description">${brand.description}</textarea><br>
状态:
<!--
html中当一个属性的属性名和属性值相同的时候,则可以忽略属性值,直接写属性名,
例如
<input type="radio" name="status" value="0" checked>
等同
<input type="radio" name="status" value="0" checked="checked">
-->
<input type="radio" name="status" value="0" <c:if test="${brand.ordered == 0}">checked</c:if>>禁用
<input type="radio" name="status" value="1" <c:if test="${brand.ordered == 1}">checked</c:if>>启用<br>
<input type="submit" value="提交">
</form>
</body>
</html>
我这里是假定上面的servlet同时也实现修改,而不仅仅是查询,所以我的提交地址还是上面那个servlet,只不过到时候规划的是走其的doPost方法。
那么接下来在实现该servlet的doPost之前,需要先定义update于brandMapper映射抽象类中的抽象方法的实现如:
@Update("update tb_brand set brand_name=#{brandName},company_name=#{companyName},ordered=#{ordered},description=#{description},status=#{status} where id=#{id}")
void Update(Brand brand);
那么brandService中对应的实现如
public void Update(Brand brand){
SqlSession sqlSession=sqlSessionFactory.openSession(true);
BrandMapper brandMapper=sqlSession.getMapper(BrandMapper.class);
brandMapper.Update(brand);
sqlSession.close();
}
这里注意下,这里session传入true,则可以自动提交事务。
那么所以这个新的servlet的doPost实现如
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
int id= Integer.parseInt(req.getParameter("id"));
String brandName=req.getParameter("brandName");
String companyName=req.getParameter("companyName");
int ordered= Integer.parseInt(req.getParameter("ordered"));
String description=req.getParameter("description");
int status= Integer.parseInt(req.getParameter("status"));
Brand brand=new Brand();
brand.setBrandName(brandName);
brand.setCompanyName(companyName);
brand.setOrdered(ordered);
brand.setDescription(description);
brand.setStatus(status);
brand.setId(id);
brandService.Update(brand);
resp.sendRedirect("/threeTierArchitectureModule/ServletQueryAll");
}
这里需要了解的是用sendRedirect不用携带request本身,则会新开一个请求,forward则是携带,这里本来是post请求,所以如果forward则会对新的url意义post方式转发了。。。
当然,做法很多,我这里只是根据我这个情况进行了修改成功就跳转到品牌列表的实现。
本期词汇
Redirect 重定向
patterns 模式(pattern 的复数形式)
extends 继承(extend 的第三人称单数形式)
关键字词:案例,修改,回显,数据,属性,名,值,html
相关文章
- 09-案例-添加(解决HTTP Status 405 - HTTP method POS
- 07-案例-准备环境(三层架构的练习环境准备)
- 12-案例-用户注册(mapper方法参数为对象,则占位为对象
- 09-资源路径问题(动态获取项目目录名(contextPath))
- 02-Request获取请求数据-请求行&请求头&请求体
- 01-Request和Response介绍&Request继承体系(获取get请
- 09-Tomcat-Idea集成本地Tomcat(Application Context浏
- 06-Tomcat配置和部署项目(修改监听端口,war包部署与zi
- 07-查询-查询所有&结果映射(POJO驼峰属性与数据库字段
- 03-解决SQL语句警告提示(IntelliJ IDEA集成数据库控制