修改:
——先显示(SELECT操作)修改的页面,在进行修改(update)
——显示修改页面
- Update的超链接:<a href="edit.do?id=<%=customer.getId()%>">
- edit方法:获取id,调用CustomerDAO的方法获取id对应的Customer对象
- JSP页面:
- 获取请求域中的Customer对象,调用对应的字段的get方法来显示值。
- 使用隐藏域来保存要修改的Customer对象的id:<input type="hidden" name="id" value="<%= customer.getId()%>">
- 使用隐藏域来保存oldName:<input type="hidden" name="oldName" value="<%= customer.getName()%>">
- 关于隐藏域:和其他的表单域一样可以被提交到服务器,只不过在页面上不显示
- 提交到update.do
步骤:
1.query.jsp中的修改链接
2.edit.do
private void edit(HttpServletRequest req,HttpServletResponse resp){
String forwardPath="error.jsp";
//1.获取请求参数id
String idStr = req.getParameter("id");
//2.调用CustomerDAO的customerDAO.get(id)获取和id对应的Customer对象customer
try {
Customer customer = customerDAO.get(Integer.parseInt(idStr));
if (customer!=null){
forwardPath = "update.jsp";
//3.将customer放入request中
req.setAttribute("customer",customer);
}
}catch (NumberFormatException e){
}
//4.响应updatecustomer.jsp页面:转发
try {
req.getRequestDispatcher(forwardPath).forward(req,resp);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
3.update.jsp
<%@ page import="com.mvcapp.entity.Customer" %><%--
Created by IntelliJ IDEA.
User: dell
Date: 2019/7/5
Time: 15:32
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
Object meg = request.getAttribute("message");
if (meg!=null){
%>
<br>
<b style="color: red"><%=meg%></b>
<br><br>
<%
}
Integer id= null;
String oldName = null;
String name = null;
String password = null;
Customer customer = (Customer) request.getAttribute("customer");
if (customer!=null){
id = customer.getId();
oldName = customer.getName();
name = customer.getName();
password = customer.getPassword();
}else {
id = Integer.parseInt(request.getParameter("id")) ;
oldName = request.getParameter("oldName");
name = request.getParameter("oldName");
password = request.getParameter("password");
}
%>
<form action="update.do" method="post">
<input type="hidden" name="id" value="<%=id%>">
<input type="hidden" name="oldName" value=<%= oldName%>>
<table>
<tr>
<td>CustomerName:</td>
<td><input type="text" name="name" value="<%=name%>"></td>
</tr>
<tr>
<td>CustomerPassword:</td>
<td><input type="text" name="password" value="<%=password%>"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="修改" ></td>
</tr>
</table>
</form>
</body>
</html>
4.update.do
private void update(HttpServletRequest req, HttpServletResponse resp) {
//1.获取表单参数:id,name,password
String id = req.getParameter("id");
String name = req.getParameter("name");
String password = req.getParameter("password");
String oldName = req.getParameter("oldName");
System.out.println(name);
System.out.println(password);
//2.检验name是否已经被占用
//2.1比较name和oldName是否相同,若相同说明name可用
if (!oldName.equalsIgnoreCase(name)){
long count = customerDAO.getCountWithName(name);
//2.2若返回值大于0,则响应update.jsp页面:通过转发的方式来响应=add.jsp
if (count>0){
//2.2.1在update.jsp页面显示一个错误信息:用户名name已经被占用,请重新选择!
//在request中放入一个属性message:用户名name已经被占用,请重新选择,
//在页面通过request.getAttribute("message")的方式来显示
req.setAttribute("message","用户名"+name+"已经被占用,请重新选择!");
//2.2.2add.jsp的表单值可以回显,
//显示提交表单的新的值,而name显示oldName,而不是新提交的name
try {
req.getRequestDispatcher("update.jsp").forward(req,resp);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//2.2.3结束方法:return
return;
}
}
//3.若验证通过,则把表单参数封装为一个Customer对象customer
Customer customer = new Customer(name,password);
customer.setId(Integer.parseInt(id));
//4.调用CustomerDAO的update(Customer customer)执行更新操作
customerDAO.update(customer);
//5.重定向到query.do
try {
resp.sendRedirect("query.do");
} catch (IOException e) {
e.printStackTrace();
}
}
实验效果: