Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2316134
  • 博文数量: 252
  • 博客积分: 5472
  • 博客等级: 大校
  • 技术积分: 3107
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-17 18:39
文章分类

全部博文(252)

文章存档

2012年(96)

2011年(156)

分类: Java

2012-01-11 18:42:44

Struts开发第四步 
调用AddressDAO.java操作数据库  修改AddressAction.java中的请求处理函数 来调用Hibernate层的AddressDAO.java 实现与数据库的交互
实现功能:
显示列表页面数据
实现增加联系人功能
实现修改联系人功能
实现删除联系人功能
 
 
1  显示列表页面数据
列表页面的请求会执行AddressAction.java中的list()函数 因此我们在该函数中来实现列表数据的提取
首先从当前session中取得已经登录的用户名 然后调用addressDAO对象的findAllByUsername()函数查询改用户的联系人列表 返回对象为list 最后调用setAttribute()将list对象保存起来 保存的变量名为addressList 供JSP页面显示
  1. public ActionForward list(ActionMapping mapping, ActionForm form,
  2.             HttpServletRequest request, HttpServletResponse response)
  3.             throws Exception {
  4.                   String username = (String)request.getSession().getAttribute(Constants.USERNAME_KEY);
  5.                   List list = addressDAO.findAllByUsername(username);
  6.                   request.setAttribute("addresslist",list);        
  7.         ActionForward forward = mapping.findForward(Constants.LIST_KEY);
  8.         return (forward);
  9.     }
上面的函数中将提取的数据列表保存在request对象中 在返回到address.jsp页面后 只需要输出该数据列表即可
首先使用判断request中是否存在addressList对象 如果存在则使用来输出该对象 他包含三个属性
name属性表示要输出addressList对象
id属性表示列表中的每一个联系人对象都会赋给address
scope属性表示查找add热水sList对象的范围为request
之间添加一个代码 使用输出当前循环中的对象address的各个属性
代码为
  1. <logic:present name="addressList">
  2.     <logic:iterate id="address" name="addressList" scope="request">
  3.     <TR>
  4.         <TD><bean:write name="address" property="name" scope="page"/></TD>
  5.         <TD><bean:write name="address" property="***" scope="page"/></TD>
  6.         <TD><bean:write name="address" property="mobile" scope="page"/></TD>
  7.         <TD><bean:write name="address" property="email" scope="page"/></TD>
  8.         <TD><bean:write name="address" property="qq" scope="page"/></TD>
  9.         <TD><bean:write name="address" property="company" scope="page"/></TD>
  10.         <TD><bean:write name="address" property="address" scope="page"/></TD>
  11.         <TD><bean:write name="address" property="postcode" scope="page"/></TD>
  12.         <TD><a href='address_edit.do?method=edit&id='><bean:message key="button.edit" /></a>
  13.         <a href="address.do?method=delete&id=address" property="id" scope="page"/>"><bean:message key="button.delete" /></a></TD>
  14.     </TR>
  15.     </logic:iterate>
  16.     </logic:present>
2 实现增加联系人功能
首先从当前Session中取出已经登录的用户名 然后调用addressDAO对象的i***ist()函数查询当前输入的联系人姓名是都存在 如果不存在 则创建一个Address对象address 根据用户输入的表单数据addressForm来设置该对象的属性 然后调用addressDAO对象的insert()函数插入对象address 如果还要返回到列表页面 因此使用与list()中相同的方法查询数据列表 并保存在request中 同时保存一条ActionMessages消息 如果当前输入的联系人姓名存在则保存一条错误信息 并返回到新建联系人页面
  1. public ActionForward insert(ActionMapping mapping, ActionForm form,
  2.             HttpServletRequest request, HttpServletResponse response)
  3.             throws Exception {
  4.         
  5.         ActionMessages messages = new ActionMessages();
  6.         AddressForm addressForm = (AddressForm) form;
  7.         String username = (String)request.getSession().getAttribute(Constants.USERNAME_KEY);
  8.         
  9.         // check if exists

  10.         boolean b = addressDAO.i***ist(username, addressForm.getName());
  11.         if (!b) {
  12.             // insert object

  13.             Address address = new Address();
  14.             address.setUsername(username);
  15.             address.setName(addressForm.getName());
  16.             address.set***(addressForm.get***());
  17.             address.setMobile(addressForm.getMobile());
  18.             address.setEmail(addressForm.getEmail());
  19.             address.setQq(addressForm.getQq());
  20.             address.setCompany(addressForm.getCompany());
  21.             address.setAddress(addressForm.getAddress());
  22.             address.setPostcode(addressForm.getPostcode());
  23.             addressDAO.insert(address);
  24.             
  25.             // save messages

  26.             messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
  27.                     "address.message.add.success"));
  28.             saveErrors(request, messages);
  29.             List list = addressDAO.findAllByUsername(username);
  30.             request.setAttribute("addressList", list);

  31.             return mapping.findForward(Constants.LIST_KEY);
  32.         } else {
  33.             messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
  34.                     "address.message.add.failed"));
  35.             saveErrors(request, messages);

  36.             request.setAttribute("addressFormBean", addressForm);

  37.             return mapping.findForward(Constants.ADD_KEY);
  38.         }
  39.     }
 
注意添加两个ActionMessages的消息 在资源文件中添加标签 并转换成中文的资源文件 同时在英文资源中添加英文的标签
 
我们在两个页面中添加如下所示的全局信息输出代码
  1. <b><html:errors property="org.apache.struts.action.GLOBAL_MESSAGE" /></b>
3 实现修改联系人功能
 
在列表页面的数据航中 每一行数据都对应一个修改按钮 单击该按钮即可进入到修改页面 在进入到修改页面address_edit.jsp时 会调用AddressAction.jsp的edit()函数 此时我们需要在该函数中查询当前id的联系人信息
 
首先从request中取得要显示的联系人id  该id是从列表进入到修改页面传递的参数 如果该id为空 则保存一条错误信息 直接返回到列表页面 如果该id 存在 则调用addressDAO的findById()函数从数据库中查找到联系人对象address 如果找不到该对象 则保存一条错误信息并返回否则就创建一个addressForm对象 将address的属性保存在addressForm对象中 并将addressForm对象保存在request中 供在页面中提取
 
  1. public ActionForward edit(ActionMapping mapping, ActionForm form,
  2.             HttpServletRequest request, HttpServletResponse response)
  3.             throws Exception {
  4.         if (isTimeout(request)) {
  5.          return mapping.findForward(Constants.INDEX_KEY);
  6.         }
  7.         ActionMessages messages = new ActionMessages();
  8.         String id = request.getParameter("id");
  9.         
  10.         if (id == null) {
  11.             // id not exist, save messages

  12.             messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
  13.                     "address.message.edit.notexist"));
  14.             saveErrors(request, messages);
  15.             return mapping.findForward(Constants.LIST_KEY);
  16.         } else {
  17.             // get object

  18.             Address address = addressDAO.findById(id);
  19.             if (address == null) {
  20.                 messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
  21.                         "address.message.edit.notexist"));
  22.                 saveErrors(request, messages);
  23.                 return mapping.findForward(Constants.LIST_KEY);
  24.             }
  25.             
  26.             // save form object

  27.             AddressForm addressForm = new AddressForm();
  28.             addressForm.setId(address.getId().toString());
  29.             addressForm.setName(address.getName());
  30.             addressForm.set***(address.get***());
  31.             addressForm.setMobile(address.getMobile());
  32.             addressForm.setEmail(address.getEmail());
  33.             addressForm.setQq(address.getQq());
  34.             addressForm.setCompany(address.getCompany());
  35.             addressForm.setAddress(address.getAddress());
  36.             addressForm.setPostcode(address.getPostcode());
  37.             
  38.             // save in request

  39.             request.setAttribute("addressFormBean", addressForm);

  40.             return mapping.findForward(Constants.EDIT_KEY);
  41.         }
  42.     }
在address_edit.jsp中 我们已经增加了表单维持的代码 此时在该页面的表单中显示查询到的联系人的各个字段的信息 但是还有一耳光隐藏框id 需要保存当前联系人的id信息 因此按照其他表单显示数据的方式 将这个表单的显示代码设为hidden
  1. <logic:present name="addressFormBean">
  2.     <html:hidden property="id" name="addressFormBean"/>
  3. </logic:present>
  4. <logic:notPresent name="addressFormBean">
  5.     <input type="hidden" name="id">
  6. </logic:notPresent>
在修改联系人页面address_edit.jsp中 当点击 提交 按钮时 就会调用 AddressAction.java 的update()函数 在该函数中来实现修改数据的操作
首先从当前Session中取得已经登录的用户名 然后再创建一个Address对象address 根据addressForm的属性来设置该对象的属性 调用addressDAO对象的update()函数来更新当前的联系人到数据库中 并保存一条成功消息 由于还要返回到列表页面 因此使用与list() 相同的方法查询数据列表 并保存在request中
更新后的update()函数
  1. public ActionForward update(ActionMapping mapping, ActionForm form,
  2.             HttpServletRequest request, HttpServletResponse response)
  3.             throws Exception {
  4.         ActionMessages messages = new ActionMessages();
  5.         AddressForm addressForm = (AddressForm) form;
  6.         Address address = new Address();
  7.         String username = (String)request.getSession().getAttribute(Constants.USERNAME_KEY);
  8.         
  9.         // update object

  10.         address.setId(new Integer(addressForm.getId()));
  11.         address.setUsername(username);
  12.         address.setName(addressForm.getName());
  13.         address.set***(addressForm.get***());
  14.         address.setMobile(addressForm.getMobile());
  15.         address.setEmail(addressForm.getEmail());
  16.         address.setQq(addressForm.getQq());
  17.         address.setCompany(addressForm.getCompany());
  18.         address.setAddress(addressForm.getAddress());
  19.         address.setPostcode(addressForm.getPostcode());
  20.         addressDAO.update(address);
  21.         
  22.         // save messages

  23.         messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
  24.                 "address.message.edit.success"));
  25.         saveErrors(request, messages);
  26.         
  27.         List list = addressDAO.findAllByUsername(username);
  28.         request.setAttribute("addressList", list);

  29.         ActionForward forward = mapping.findForward(Constants.LIST_KEY);
  30.         return (forward);
  31.     }
 
同样添加国际标签
 
需要在address_edit.jsp页面中添加下面的全局信息输出代码
  1. <b><html:errors property="org.apache.struts.action.GLOBAL_MESSAGE" /></b>
 
 
4 实现删除联系人功能
  1. public ActionForward delete(ActionMapping mapping, ActionForm form,
  2.             HttpServletRequest request, HttpServletResponse response)
  3.             throws Exception {
  4.         ActionMessages messages = new ActionMessages();

  5.         String id = request.getParameter("id");
  6.         if (id == null) {
  7.             // if id not exist

  8.             messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
  9.                     "address.message.edit.notexist"));
  10.         } else {
  11.             // delete object

  12.             addressDAO.delete(id);
  13.             
  14.             // save messages

  15.             messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
  16.                     "address.message.delete.success"));

  17.             String username = (String)request.getSession().getAttribute(Constants.USERNAME_KEY);
  18.             List list = addressDAO.findAllByUsername(username);
  19.             request.setAttribute("addressList", list);
  20.         }
  21.         saveErrors(request, messages);
  22.         return mapping.findForward(Constants.LIST_KEY);
  23.     }
添加国际标签
阅读(2645) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

168168屈2015-04-17 16:29:04

您好,楼主,请问我要是删除联系人前想弹出确认框,是就删除,否就返回,是在下面这条语句中设置吗

  <a href="address.do?method=delete&id=<bean:write name="address" property="id" scope="page"/>"><bean:message key="button.delete" /></a></TD>