编程资料集中营
 | 网站首页 | 文章中心 | 编程资料2 | 软件下载 | BT下载 | 八卦星闻 | 音乐在线 | 在线游戏 | 免费电影 | 进入问吧 | 
JSF+Spring+Hibernate的实例讲解,,
您现在的位置: 编程资料,学习资料,c,c++,vc,vc++,java,jsp,j2ee,j2me,asp,php >> 文章中心 >> JAVA 专区 >> Hibernate 技术 >> 文章正文
【字体:
JSF+Spring+Hibernate的实例讲解   进入问吧

本站地址:http://www.bajiao123.com

作者:本站    文章来源:网络    点击数:    更新时间:2007-1-10    

JSF+Spring+Hibernate的实例讲解

面向接口编程贯穿于整个设计。在表现层,四个bean被使用:ProductBean, ProductListBean, UserBean和 MessageBean。业务逻辑层包含两个服务(CatalogService and UserService)和三个业务对象(Product, Category, and User)。集成层包括两个DAO接口和它们的Hibernate实现。Spring application contexts 包含和管理业务逻辑层和集成层的很多object beans。ServiceLocator使JSF和业务逻辑层结合到一起。
Wire everything up
因为这篇文章篇幅的限制,我们只看一个用例。CreateProduct用例示范了怎样将每件事情串起来建造应用程序。深入细节以前,让我们使用一个序列图(图7)示范所有层端到端的整合:

                             

                                    
                                                       图7 CreateProduct用例的序列图
现在,让我们通过对每一层的介绍讨论如何实现CreateProduct用例的更多细节。
表现层
表现层的实现包括创建JSP页面,定义页面导航,创建和配置backing beans,将JSF与业务逻辑层结合。
JSP page:createProduct.jsp是创建新产品的页面。它包括UI组件和捆绑这些组件的ProductBean。ValidateItemsRange自定义标签检验用户选择目录的数目。每个新产品至少有一个目录被选择。
Page navigation:应用程序的导航定义在应用程序的配置文件里面,faces-navigation.xml。CreateProduct定义的导航规则是:
<navigation-rule>
   <from-view-id>*</from-view-id>
   <navigation-case>
      <from-outcome>createProduct</from-outcome>
      <to-view-id>/createProduct.jsp</to-view-id>
   </navigation-case>
</navigation-rule>
<navigation-rule>
   <from-view-id>/createProduct.jsp</from-view-id>
   <navigation-case>
      <from-outcome>success</from-outcome>
      <to-view-id>/uploadImage.jsp</to-view-id>
   </navigation-case>
   <navigation-case>
      <from-outcome>retry</from-outcome>
      <to-view-id>/createProduct.jsp</to-view-id>
   </navigation-case>
   <navigation-case>
      <from-outcome>cancel</from-outcome>
      <to-view-id>/productList.jsp</to-view-id>
   </navigation-case>
</navigation-rule>
Backing bean: ProductBean不仅包含了页面中UI组件与数据映射的属性,也包含三个actions:createAction,editAction和deleteAction。这是createAction()方法的代码:

public String createAction() {
   try {
      Product product = ProductBeanBuilder.createProduct(this);

      //Save the product.
      this.serviceLocator.getCatalogService().saveProduct(product);

      //Store the current product id inside the session bean.
      //For the use of image uploader.
      FacesUtils.getSessionBean().setCurrentProductId(this.id);

      //Remove the productList inside the cache.
      this.logger.debug("remove ProductListBean from cache");
      FacesUtils.resetManagedBean(BeanNames.PRODUCT_LIST_BEAN);
   } catch (DuplicateProductIdException de) {
      String msg = "Product id already exists";
      this.logger.info(msg);
      FacesUtils.addErrorMessage(msg);

      return NavigationResults.RETRY;
   } catch (Exception e) {
      String msg = "Could not save product";
      this.logger.error(msg, e);
      FacesUtils.addErrorMessage(msg + ": Internal Error");

      return NavigationResults.FAILURE;
   }
   String msg = "Product with id of " + this.id + " was created successfully.";
   this.logger.debug(msg);
   FacesUtils.addInfoMessage(msg);

   return NavigationResults.SUCCESS;
}
在这个action里面,基于ProductBean的一个Product业务对象被建立。ServiceLocator查询CatalogService。最后,createProduct的请求被委派给业务逻辑层的CatalogService。
Managed-bean declaration: ProductBean必须在JSF的配置资源文件faces-managed-bean.xml中配置:

<managed-bean>
   <description>
      Backing bean that contains product information.
   </description>
   <managed-bean-name>productBean</managed-bean-name>
   <managed-bean-class>catalog.view.bean.ProductBean</managed-bean-class>
   <managed-bean-scope>request</managed-bean-scope>   
   <managed-property>
      <property-name>id</property-name>
      <value>#{param.productId}</value>
   </managed-property>
   <managed-property>
      <property-name>serviceLocator</property-name>
      <value>#{serviceLocatorBean}</value>
   </managed-property>
</managed-bean>
ProductBean有一个请求的范围,这意味着如果ProductBean在JSP页面内引用JSF执行为每一个请求创建ProductBean实例的任务。被管理的ID属性与productId这个请求参数组装。JSF从请求得到参数,设置managed property。
Integration between presentation and business-logic tiers: ServiceLocator抽象了查询服务的逻辑。在例子应用程序中,ServiceLocator被定义成一个一个接口。接口被JSF managed bean实现为ServiceLocatorBean,它从Spring application context查询服务:
ServletContext context = FacesUtils.getServletContext();
this.appContext = WebApplicationContextUtils.getRequiredWebApplicationContext(context);
this.catalogService = (CatalogService)this.lookupService(CATALOG_SERVICE_BEAN_NAME);
this.userService = (UserService)this.lookupService(USER_SERVICE_BEAN_NAME);
ServiceLocator被定义为BaseBean中的一个属性。JSF managed bean容易连接ServiceLocator执行必须访问ServiceLocator的那些managed beans。使用了Inversion of control(IOC,控制反转)
业务逻辑层
定义业务对象,创建服务接口和实现,在Spring中配置这些对象组成了这一层的任务。
Business objects: 因为Hibernate提供了持久化,Product和Category业务对象需要为它们包含的所有属性提供getter和setter方法。
Business services:CatalogService接口定义了所有与目录管理有关的服务:

public interface CatalogService {
   p

上一页  [1] [2] [3] [4] [5] 下一页

   

进入问吧

本站地址:http://www.bajiao123.com

文章录入:admin    责任编辑:admin 
高级搜索
编程资料集中营