基于java网页设计实例_JavaWeb:基于MVC设计模式的一个小案例(二)

本文详细介绍了如何使用JavaWeb中的MVC设计模式实现用户管理功能,包括添加、编辑和更新用户信息。在CustomerServlet.java中,通过获取表单数据、验证用户名唯一性并调用DAO进行数据库操作。当用户名已被占用时,会在newCustomer.jsp显示错误提示。成功添加或更新用户后,会重定向到success.jsp页面。同时,文章也提到了updatecustomer.jsp页面的实现,包括表单回显和错误处理。最后,补充了CustomerDao接口和实现类中缺少的update方法。
摘要由CSDN通过智能技术生成

今天是把昨天没有写完的功能补充完整。

在CustomerServlet.java 中,增加了添加信息的功能,补上代码如下:

1 private voidaddCustomer(HttpServletRequest request, HttpServletResponse response)2 throwsServletException, IOException {3

4 //1、获取表单信息:name、address、phone

5 String name = request.getParameter("name");6 String address = request.getParameter("address");7 String phone = request.getParameter("phone");8

9 //2、检验 name 是否被占用10 //2.1、调用 CustomerDao 的 getCountWithName(String name)方法,获取name 在数据库中是否存在

11 long count =customerDao.getCountWithName(name);12 //2.2、若返回值大于 0 , 则响应 newCustomer.jsp 页面:通过转发的方式

13 if(count > 0){14 //2.2.1、要求在 newCustomer.jsp 页面显示一个错误提示:用户名 name 已经被占用,请重新选择。15 //在 request 中放入一个属性 message:用户名 name 已经被占用,请重新选择。16 //在 newcustomer.jsp 页面上通过 request.getAttribute("message") 的方式来显示。

17 request.setAttribute("message", "用户名" + name + "已经被占用,请重新选择");18

19 //2.2.2、newCustomer.jsp 的表单可以回显。20 //通过 value=21 //来进行回显。

22

23 request.getRequestDispatcher("/newCustomer.jsp").forward(request, response);24 //2.2.3、结束方法 return

25 return;26 }27

28 //3、把表单参数封装为一个 Customer 对象 customer

29 Customer customer = newCustomer(name, address, phone);30 //4、调用 CustomerDao 的 save 方法,执行保存操作

31 customerDao.save(customer);32 //5.重定向到 success.jsp 页面。要是用转发,刷新页面会有表单的重复提交。

33 response.sendRedirect("success.jsp");34 }

然后我是创建了 newcustomer.jsp,代码如下:

1

2 pageEncoding="UTF-8"%>

3

4

5

6

7

Insert title here

8

9

10

11 Objectmes=request.getAttribute("message");12 if(mes != null){13 %>

14

15

16

17 }18 %>

19

20

21

22

23

Name:

24

"/>

25

26

27

Address:

28

"/>

29

30

31

Phone:

32

"/>

33

34

35

36

37

38

39

40

如果信息增加成功,会重定向到 success.jsp 页面。代码如下:

1

2 pageEncoding="UTF-8"%>

3

4

5

6

7

Insert title here

8

9

10

操作成功 ^_^

11

12

返回。。。

13

14

然后就是新增加了修改信息的方法,首先会获取你要编辑的那一行的 id,根据 id 显示对应的Customer 的对象的信息,然后再 update 进行修改

所以就是分成了两个动作 edit.do 和 update.do ,在CustomerServlet.java 中补上代码,如下。

1 private voidedit(HttpServletRequest request, HttpServletResponse response)2 throwsServletException, IOException{3

4 String path = "/error.jsp";5

6 //1、获取请求参数 id

7 String idStr = request.getParameter("id");8 try{9 //2、调用CustomerDao 的 get 方法 获取和 id 对应的 Customer 对象

10 Customer cust=customerDao.get(Integer.parseInt(idStr));11 if(cust != null){12 path = "/updatecustomer.jsp";13 //3、将 customer 放入 request 中

14 request.setAttribute("customers", cust);15 }16 } catch(NumberFormatException e) {17 e.printStackTrace();18 }19 //4、响应 updatecustomer.jsp 页面:转发。

20 request.getRequestDispatcher(path).forward(request, response);21 }22

23 private voidupdate(HttpServletRequest request, HttpServletResponse response)24 throwsServletException, IOException{25

26 //1、获取当前 表单的参数 id、name、address、phone、oldName

27 String id = request.getParameter("id");28 String name = request.getParameter("name");29 String address = request.getParameter("address");30 String phone = request.getParameter("phone");31 String oldName = request.getParameter("oldName");32

33 //2、检验name 是否已经被占用。34 //2.1、比较 name 和 oldName 是否相同,若相同 说明 name 可用。35 //若不相同,则调用CustomerDao 的 getCountWithName 方法,获取name 在数据库中是否存在

36 if(!oldName.equalsIgnoreCase(name)){37 long count =customerDao.getCountWithName(name);38 //2.2、若返回值 > 0,则响应 updatecustomer.jsp 页面:通过转发的方式

39 if(count > 0){40 //2.2.1、要求在 updatecustomer.jsp 页面显示一个错误提示:用户名 name 已经被占用,请重新选择。41 //在 request 中放入一个属性 message:用户名 name 已经被占用,请重新选择。42 //在页面山通过 request.getAttribute("message") 的方式来显示。

43 request.setAttribute("message", "用户名" + name + "已经被占用,请重新选择。");44 //2.2.2、updatecustomer.jsp 的表单可以回显。45

46 //2.2.3、结束方法:return

47 request.getRequestDispatcher("/updatecustomer.jsp").forward(request, response);48 return;49 }50

51 }52 //3、若验证通过,把表单参数封装为一个 Customer 对象 customer

53 Customer customer = newCustomer(oldName, address, phone);54 customer.setId(Integer.parseInt(id));55

56 //4、调用 CustomerDao 的update 方法,执行保存操作。

57 customerDao.update(customer);58 //5.重定向到 query.do 页面

59 response.sendRedirect("query.do");60 }

调用 customerDao.update 方法时,发现之前写底层的时候 CustomerDao 接口,漏写了这个方法,所以补上:

CustomerDao.java 中补上:

1 /**

2 * 更新3 *@paramcustomer4 */

5 public void update(Customer customer);

CustomerDaoJdbcImpl.java 中补上:

1 @Override2 public voidupdate(Customer customer) {3 String sql = "update customer set name=?,address=?,phone=? where id=?";4 update(sql, customer.getName(), customer.getAddress(), customer.getPhone(), customer.getId());5 }

我的 修改信息的页面 updatecustomer.jsp  是这样写的,考虑到了这几点:1、不区分大小写,(因为MySQL 里是不区分大小写的原因)。2、因为我的name 是唯一的,所以要修改时,要先判断新的 name 和 旧的name 是否一致,一致的话,就说明这个name 可以用。不一致的话,就得去数据库里查询一下有没有这个记录,有的话,得给出错误提示。3、表单的回显,得考虑如果新的 name 和旧的name 一致,回显的数据就是 新的。如果不一致且新的name 在数据库中有记录,回显的得是旧的数据。

代码如下:

1

2

3

4 pageEncoding="UTF-8"%>

5

6

7

8

9

Insert title here

10

11

12

13 Objectmes=request.getAttribute("message");14 if(mes != null){15 %>

16

17

18

19 }20

21 Stringid= null;22 Stringname= null;23 StringoldName= null;24 Stringaddress= null;25 Stringphone= null;26 Customer customer=(Customer) request.getAttribute("customers");27 if(customer != null){28 id=customer.getId()+ "";29 name=customer.getName();30 oldName=customer.getName();31 address=customer.getAddress();32 phone=customer.getPhone();33 }else{34 id=request.getParameter("id");35 name=request.getParameter("oldName");36 oldName=request.getParameter("oldName");37 address=request.getParameter("address");38 phone=request.getParameter("phone");39 }40 %>

41

42

43 "/>

44 "/>

45

46

47

Name:

48

"/>

49

50

51

Address:

52

"/>

53

54

55

Phone:

56

"/>

57

58

59

60

61

62

63

64

至此,实现了基本的增删改查的操作,其实里面很多的细节还值得自己今后完善。

有些细节的考虑还值得反复推敲一下,例如:隐藏域的问题,回显的问题,对 name 字段的验证,还有我的添加信息的界面和修改信息的界面其实可以写成一个的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值