MESSL(maven + extjs + spring portlet mvc + spring web flow + liferay )整合架构 4

简介:

 上篇文章讲到了我们定义portlet应用级别的spring 配置文件为/WEB-INF/config/envprovisioning-config.xml ,下面我们来看下这个spring配置文件内容:

 

 
 
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans" 
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.        xmlns:webflow="http://www.springframework.org/schema/webflow-config" 
  5.        xsi:schemaLocation=" 
  6.            http://www.springframework.org/schema/beans 
  7.            http://www.springframework.org/schema/beans/spring-beans.xsd 
  8.            http://www.springframework.org/schema/webflow-config 
  9.            http://www.springframework.org/schema/webflow-config/spring-webflow-config.xsd"> 
  10.  
  11.     <!-- Maps portlet modes to handlers -->  
  12.     <bean id="portletModeHandlerMapping" class="org.springframework.web.portlet.handler.PortletModeHandlerMapping"> 
  13.         <property name="portletModeMap"> 
  14.             <map> 
  15.                 <entry key="view"> 
  16.                     <bean class="com.walmart.platform.envprovisioning.handlers.EnvProvisionFlowHandler" /> 
  17.                 </entry> 
  18.             </map> 
  19.         </property> 
  20.         <property name="interceptors">   
  21.             <list>   
  22.                 <ref bean="envprovisionhandlerinterceptor"/> 
  23.             </list>   
  24.         </property> 
  25.     </bean> 
  26.     <!-- add interceptor to get user and privilege --> 
  27.     <bean id="envprovisionhandlerinterceptor" class="com.walmart.platform.envprovisioning.interceptors.EnvProvisionHandlerInterceptor"/> 
  28.  
  29.     <!-- Maps logical view names selected by the url filename controller to .jsp view templates within the /WEB-INF directory -->    
  30.     <bean id="internalJspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
  31.         <property name="prefix" value="/WEB-INF/" /> 
  32.         <property name="suffix" value=".jsp" /> 
  33.     </bean> 
  34.      
  35.     <!-- Enables FlowHandlers --> 
  36.     <bean class="org.springframework.webflow.mvc.portlet.FlowHandlerAdapter"> 
  37.         <property name="flowExecutor" ref="flowExecutor"/> 
  38.     </bean> 
  39.  
  40.     <!-- Executes flows: the central entry point into the Spring Web Flow system --> 
  41.     <webflow:flow-executor id="flowExecutor" /> 
  42.      
  43.     <!-- The registry of executable flow definitions --> 
  44.     <webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices"> 
  45.         <webflow:flow-location path="/WEB-INF/flows/envprovision/envprovision.xml" /> 
  46.     </webflow:flow-registry>     
  47.  
  48.     <!-- Plugs in Spring's JSR-303 validator adapter --> 
  49.     <webflow:flow-builder-services id="flowBuilderServices" development="true" validator="validator" /> 
  50.          
  51.     <!-- Bootstraps JSR-303 validation and exposes it through Spring's Validator interface --> 
  52.     <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/> 
  53.  
  54.   
  55. </beans> 

这个文件更多的是对spring web flow进行了配置,容我细细道来:

首先在第15-17行,我们portletModeMap,对view Mode ,我们扔给了EnvProvisionFlowHandler类,这就表明,我们让在spring portlet mvc中,我们用EnvProvisionFlowHandler类充当portlet view mode的处理类。 而这个EnvProvisionFlowHandler类是从AbstractFlowHandler继承来的, 所以我们理所当然的使用了Spring WebFlow 的FlowHandler来充当处理器:

 
 
  1. /** 
  2.  * this class is the flowHandler 
  3.  * When application deployed to container ,the container will read the envprovisioning-config.xml 
  4.  * then it will get the instance for this flowHandler ,and the getFlowId() method will identify which flow it will 
  5.  * enter into. 
  6.  *  
  7.  *@author cwang58 
  8.  *@created date: Feb 18, 2013 
  9.  */ 
  10. public class EnvProvisionFlowHandler extends AbstractFlowHandler { 
  11.  
  12.     /** 
  13.      * the flowId which identifies the flow which will be handled by this flowHandler 
  14.      * since here it returns envprovision ,so it will go to the flow which is describled by flow 
  15.      * definition file "envprovision.xml" 
  16.      */ 
  17.     public String getFlowId() { 
  18.     return "envprovision"
  19.     } 
  20.  
  21.      
  22.  
  23.  

这个类我们只需要实现一个方法,就是getFlowId(),他用来表示,我们用什么web flow来充当view 模式的处理器, 在这里,返回的是envprovision,所以我们用这个流来充当view模式处理器。

 

既然得到了flowId之后,我们就去找对应的 web flow.首先必须明白,flow的执行者是由FlowHandlerAdaptor来完成的,所以我们在36-38行,我们定义了一个属性叫flowExecutor来专门用于执行flow.

而flowExecutor会专门使用一个flowRegistry Bean来执行定义在/WEB-INF/flows 下的基于XML的流跳转定义文件,所以我们又在44-46行中显式的给出了流定义XML文件,因为(Convention over Configuration),默认的流定义文件的文件名就是flowId,所以我们很容易找到了前文中返回的envprovision的流Id就对应这里的envprovision.xml文件,所以当portlet view 模式时,就会把控制权交给Spring Web Flow,然后用envprovision.xml中定义的流跳转逻辑来处理view 模式,就这么简单。

 

下篇文章我们来探讨这个流控制文件。





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1138849,如需转载请自行联系原作者

目录
相关文章
|
前端开发 JavaScript
探索现代Web应用的微前端架构
【10月更文挑战第40天】在数字时代的浪潮中,Web应用的发展日益复杂多变。微前端架构作为一种新兴的设计理念,正逐步改变着传统的单一前端开发模式。本文将深入探讨微前端的核心概念、实现原理及其在实际项目中的应用,同时通过一个简单的代码示例,揭示如何将一个庞大的前端工程拆分成小而美的模块,进而提升项目的可维护性、可扩展性和开发效率。
|
存储 消息中间件 缓存
支持百万人超大群聊的Web端IM架构设计与实践
本文将回顾实现一个支持百万人超大群聊的Web端IM架构时遇到的技术挑战和解决思路,内容包括:通信方案选型、消息存储、消息有序性、消息可靠性、未读数统计。希望能带给你启发。
745 0
支持百万人超大群聊的Web端IM架构设计与实践
|
弹性计算 Java 关系型数据库
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
400 2
Web应用上云经典架构实践教学
|
弹性计算 Java 数据库
Web应用上云经典架构实战
本课程详细介绍了Web应用上云的经典架构实战,涵盖前期准备、配置ALB、创建服务器组和监听、验证ECS公网能力、环境配置(JDK、Maven、Node、Git)、下载并运行若依框架、操作第二台ECS以及验证高可用性。通过具体步骤和命令,帮助学员快速掌握云上部署的全流程。
478 1
|
监控 前端开发 JavaScript
探索微前端架构:构建可扩展的现代Web应用
【10月更文挑战第29天】本文探讨了微前端架构的核心概念、优势及实施策略,通过将大型前端应用拆分为多个独立的微应用,提高开发效率、增强可维护性,并支持灵活的技术选型。实际案例包括Spotify和Zalando的成功应用。
|
消息中间件 前端开发 JavaScript
探索微前端架构:构建现代Web应用的新策略
本文探讨了微前端架构的概念、优势及实施策略,旨在解决传统单体应用难以快速迭代和团队协作的问题。微前端允许不同团队独立开发、部署应用的各部分,提升灵活性与可维护性。文中还讨论了技术栈灵活性、独立部署、团队自治等优势,并提出了定义清晰接口、使用Web组件、状态管理和样式隔离等实施策略。
|
弹性计算 负载均衡 安全
云端问道-Web应用上云经典架构方案教学
本文介绍了企业业务上云的经典架构设计,涵盖用户业务现状及挑战、阿里云业务托管架构设计、方案选型配置及业务初期低门槛使用等内容。通过详细分析现有架构的问题,提出了高可用、安全、可扩展的解决方案,并提供了按量付费的低成本选项,帮助企业在业务初期顺利上云。
477 0
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
910 0
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
521 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
375 0

推荐镜像

更多