玩玩Spring之hibernate+ webwork+ spring添删改查示例

    技术2022-05-11  70

    主演:webwork    配角:struts、jsp、hibernate、spring等      借着吹spring的风,今天笔者给大家介绍一种很多人都非常欣赏的轻量极、高雅的J2EE组合,那就是hibernate+ webwork+ spring。说介绍不准确,应该还只是一个简单的演示,毕竟webwork的赞歌已经有很多人唱过了,这里就不重复(主要还是因为唱不出来,惭愧!)。我只希望能通过简单的代码,让大家去体会webwork的高雅、过人之处。     同样是上一篇中有关一个用户表“添删改查”的例子,这里只是把Web层改成使用webwork实现,下面我们直接介绍Web开发部分,其它部分的开发请照搬前面一篇的例子,新人可以结合上个例子中的Struts部分进行看。 1、写Action   webwork跟Struts乃至其它的MVC框架一样,都有一个处理Web请求的Action,我们来看看本例子中这个Action的内容。下面是UserManageAction.java的全部代码:   package com.easyjf.webwork.action; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import com.easyjf.example.business.IUser; import com.easyjf.example.business.IUserService; import com.easyjf.util.CommUtil; import com.easyjf.web.tools.IPageList; import com.easyjf.web.tools.ListQuery; import com.easyjf.web.tools.PageList; import com.opensymphony.webwork.interceptor.ParameterAware; import com.opensymphony.xwork.ActionSupport; import com.opensymphony.xwork.Preparable; public class UserManageAction extends ActionSupport implements ParameterAware,Preparable { private List allUser; private IUserService userService;  private IUser user; private Map parameters; //用户查询 public String query() throws Exception {   String[] temp=(String[])parameters.get("page");  int currentPage=CommUtil.null2Int(temp!=null?temp[0]:"0");  temp=(String[])parameters.get("pageSize");  int pageSize=CommUtil.null2Int(temp!=null?temp[0]:"0");  if(currentPage<1)currentPage=1;  if(pageSize<1)pageSize=10;  String scope="1=1";  Collection paras=new ArrayList();  temp=(String[])parameters.get("orderType");  String orderType=CommUtil.null2String(temp!=null?temp[0]:"");   temp=(String[])parameters.get("orderField");  String orderField=CommUtil.null2String(temp!=null?temp[0]:"");  temp=(String[])parameters.get("queryUserName");  String userName=CommUtil.null2String(temp!=null?temp[0]:"");  temp=(String[])parameters.get("queryTel");  String tel=CommUtil.null2String(temp!=null?temp[0]:"");      if(!userName.equals(""))  {   scope+=" and userName like ?";   paras.add("%"+userName+"%");  }  if(!tel.equals(""))  {   scope+=" and tel like ?";   paras.add("%"+tel+"%");  }    if(orderField.equals(""))//默认按用户名排序  {  orderField="userName";  orderType="desc";      }   if(!orderField.equals(""))  {  scope +=" order by "+orderField;  if(!orderType.equals(""))scope+=" "+orderType;  }  IPageList pList=new PageList(new ListQuery(userService.query(scope,paras)));  pList.doList(pageSize,currentPage,"","");  if(pList!=null){   this.parameters.put("list",pList.getResult());   this.parameters.put("pages",new Integer(pList.getPages()));   this.parameters.put("rows",new Integer(pList.getRowCount()));   this.parameters.put("page",new Integer(pList.getCurrentPage()));     this.parameters.put("gotoPageHTML",CommUtil.showPageHtml(pList.getCurrentPage(),pList.getPages()));   }  this.parameters.put("orderType",orderType);  this.parameters.put("orderField",orderField);     this.allUser = userService.query(scope,paras);     return execute(); } //添加或修改用户 public String  edit() throws Exception {   return execute(); } //删除用户 public String  del() throws Exception {      if(user!=null && userService.del(this.user))     {      this.parameters.put("msg","数据删除成功!");           }     else     {      this.parameters.put("msg","数据修改失败");      }  return query(); } //保存用户信息 public String  save() throws Exception {  IUser  obj=this.getUser();  boolean ret=false;  if(obj!=null){  if((obj.getCid()!=null)&&(!obj.getCid().equals("")))ret=userService.update(user);  else ret=userService.save(user);  }     if(ret)     {      this.parameters.put("msg","数据操作成功!");           }     else     {      this.parameters.put("msg","数据操作失败");      }  return query(); } public IUserService getUserService() {  return userService; } public List getAllUser() {  return allUser; } public IUser getUser() {  return user; } public void setUser(IUser user) {  this.user = user; } public void setUserService(IUserService userService) {  this.userService=userService; } public void setParameters(Map parameters) {  this.parameters=parameters; } public Map getParameters() {  return parameters; } public void prepare() throws Exception {  this.form2Obj(); } //根据页面参数创建IUser对象 private void form2Obj() {  String[] temp=(String[])parameters.get("cid");  String cid=temp!=null?temp[0]:"";  IUser user=null;  if(cid!=null && (!cid.equals("")))user=userService.read(cid);  if(user==null)user=userService.newUser();  setUser(user); }  }     2、写页面文件   xwork支持多种页面模板,可以是JSP,也可以是Freemarker等,这里我们使用的是大家比较熟悉的JSP作模板。页面同样分为userEdit.jsp以及userList.jsp两个,模板中使用了一些wework的标签,(还好没有全部搞成标签,呵呵!),大家注意观察以<ww: 开头的标签写法就OK了,可以对照Struts的标签看一下。这两个页面从我们这个示例的完整源代码中可以得到,完整示例源码下载地址:      http://www.easyjf.com/html/bbs/20060510/1512699849613700.htm?ejid=1141219960424115   3、配置xwork.xml     可以理解成struts中的struts-config.xml文件,当然等你真正熟悉他以后,发现他的配置文件中的玩艺及技术含量都要比Struts牛的多。下面是xwork.xml文件的全部内容:   <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" " http://www.opensymphony.com/xwork/xwork-1.1.1.dtd"> <xwork>    <include file="webwork-default.xml"/>        <package name="userManage"  extends="webwork-default" namespace="/userManage">                <action name="query" class="com.easyjf.webwork.action.UserManageAction" method="query">             <result>/userList.jsp</result>             <interceptor-ref name="params" />             <interceptor-ref name="basicStack"/>         </action>         <action name="edit" class="com.easyjf.webwork.action.UserManageAction" method="edit">             <result>/userEdit.jsp</result>      <interceptor-ref name="params" />                   <interceptor-ref name="basicStack"/>         </action>         <action name="save" class="com.easyjf.webwork.action.UserManageAction" method="save">             <result name="input">/userEdit.jsp</result>              <result>/userList.jsp</result>         </action>         <action name="del" class="com.easyjf.webwork.action.UserManageAction" method="del">                         <result>/userList.jsp</result>         </action>     </package> </xwork>     4、修改web.xml文件   以Struts类似,同样需要修改web.xml文件,才能让webwork处理指定的请求。下面是本例中的web.xml文件的全部内容: <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" " http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app>     <filter>         <filter-name>webwork</filter-name>         <filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher</filter-class>     </filter>     <filter-mapping>         <filter-name>webwork</filter-name>         <url-pattern>/*</url-pattern>     </filter-mapping>     <listener>         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>     </listener> </web-app>   通过上面的配置,使得所有的请求都会交给webwork处理。     好,现在一个完整的webwork示例程序就完了。不知webwork新朋友注意到没,webwork中没有了ActionForm Bean,配置文件也相对比较清晰明了,Action中的方法不再有类似public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)这样一大串让人看起来就不爽的参数,其干净得一个参数也没有。大家可以闭上眼睛摸着脑门再体会一下Webwork的Action的写法,是不是要简洁、华丽、优雅得多。     当然,那么多技术牛人在支持webwork,并不是单看中这个Action的简洁,webwork本身还有很多东西,还包括AJAX支持,报表集成,强大的验证系统以及IOC等,其中有很多是Spring也有的东西,仅从技术的角度来看,笔者也认为他确实能称上是数一数二的。     当然,本人不是webwork的粉丝,因此其它MVC框架的粉丝这里不要PK我,Struts的朋友就更不应该了,因为webwork开发团队与struts团队已经合并了,合并后的作品Apache Struts Action 2.0也即将出来了。Tapestry 、JSF的粉丝看到这里也别纳闷,有竞争才有技术进步嘛。      好,今天就先玩到这里。由于笔者对webwork只是粗浅的看了一下,因此也许还不能完全通过这个示例表述出webwork的原意。还请webwork的超级粉丝或专家来帮忙补充一下,若发现不足的地方,请不吝批评指教。   本示例的全部源码下载地址:    http://www.easyjf.com/html/bbs/20060510/1512699849613700.htm?ejid=1141219960424115     本示例的运行效果图:    http://www.easyjf.com/html/bbs/20060510/1512699849613700.htm?ejid=1141219960424115 下面发出来的偶在我机器上滴程序运行的截图! 1、输入userManage/query.action后,出现的信息列表界面 2、在查询框架输入“大”,点“查询”,模糊出几个大峡,呵呵 3、点第一个界面中,下面的翻页,跑到了第二页 4、把鼠标放到上面的表格的标题栏,如“用户名”处,可以选择按该字段的升除序排序。 5、点下面的“添加“按钮,进入添加页面 6、双击信息列表中的某一条记录,或者选中一条记录,并点下面的“修改”按钮,即进入信息修改界面! 7、选中一某一条记录,然后点下面的“删除”按钮,即可执行删除操作。本例中没有做批量删除,所以一次只能删一条,选择多了也是白选!哈哈 8、eclipse开发环境  9、网页制作Dreamweaver mx 11、数据库为My SQL5,管理工具my sql front   

    最新回复(0)