修改:
——先显示(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(); } }
实验效果: