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

简介:

 

我们已经知道如何从页面上触发动作来激活flow的transition,我们现在思考问题,如果这个动作需要用到flowScope上的数据,那么我们如何用程序来和flowScope交互呢?

 

方法很简单,我们在业务方法中加一个参数,参数类型为RequestContext,用这个类就可以和flowScope进行交互了:

 
 
  1. /** 
  2.      * remove the AppInfo from flow scope 
  3.      */ 
  4.     public void removeAppInfo(RequestContext context) { 
  5.  
  6.         // clear all the information which has been stored in this object 
  7.         context.getFlowScope().remove("appInfo"); 
  8.         //context.getFlowScope().remove("appInfoJSONData"); 
  9.         context.getFlowScope().put("appInfoJSONData"new JSONObject().toString()); 
  10.         context.getFlowScope().put("hasAppInfoData",false); 
  11.     } 
  12.      

比如,这里我们定义了一个业务方法叫removeAppInfo,我们让它的逻辑为从flowScope上删除appInfo的数据,然后把appInfoJSONData清零,最后吧hasAppInfoData设为false .

 

这个方法的调用,我们还是通过绑定页面上的某个事件来触发调用,和上一篇文章一样,所以我这里就略去了。假设是在defineApp.jsp页面上,并且_eventId为cancel时候触发调用:

 
 
  1. <portlet:actionURL var="cancel"> 
  2.     <portlet:param name="execution" value="${flowExecutionKey}" /> 
  3.     <portlet:param name="_eventId" value="cancel" /> 
  4. </portlet:actionURL> 

 

那么在flowScope上,为了绑定这段java业务逻辑代码,我们就在flow定义文件中view-state为defineApp的代码配置如下:

 
 
  1. <view-state id="defineApp" >          
  2.      ...
  3.         <transition on="cancel" to="aerEnvList" > 
  4.             <evaluate expression="defineAppService.removeAppInfo(flowRequestContext)" /> 
  5.             <evaluate expression="defineProjectService.removeProjectInfo(flowRequestContext)" /> 
  6.             <evaluate expression="defineHostVipService.removeHostVipInfo(flowRequestContext)" /> 
  7.             <evaluate expression="defineDBSrvService.removeDBServiceInfo(flowRequestContext)"/> 
  8.         </transition> 
  9.     </view-state> 

 

这里可以看出来,在04行,只要传一个内置变量名为flowRequestContext,就可以轻松的调用对应业务方法了,而这个flowRequestContext中的内容,就对应了我们java类org.springframeowork.webflow.execution.RequestContext





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

目录
相关文章
|
10月前
|
Java 数据库 数据安全/隐私保护
Spring Boot四层架构深度解析
本文详解Spring Boot四层架构(Controller-Service-DAO-Database)的核心思想与实战应用,涵盖职责划分、代码结构、依赖注入、事务管理及常见问题解决方案,助力构建高内聚、低耦合的企业级应用。
1797 1
|
10月前
|
Kubernetes Java 微服务
Spring Cloud 微服务架构技术解析与实践指南
本文档全面介绍 Spring Cloud 微服务架构的核心组件、设计理念和实现方案。作为构建分布式系统的综合工具箱,Spring Cloud 为微服务架构提供了服务发现、配置管理、负载均衡、熔断器等关键功能的标准化实现。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
845 0
|
前端开发 JavaScript
探索现代Web应用的微前端架构
【10月更文挑战第40天】在数字时代的浪潮中,Web应用的发展日益复杂多变。微前端架构作为一种新兴的设计理念,正逐步改变着传统的单一前端开发模式。本文将深入探讨微前端的核心概念、实现原理及其在实际项目中的应用,同时通过一个简单的代码示例,揭示如何将一个庞大的前端工程拆分成小而美的模块,进而提升项目的可维护性、可扩展性和开发效率。
|
12月前
|
存储 Java 数据库连接
简单学Spring Boot | 博客项目的三层架构重构
本案例通过采用三层架构(数据访问层、业务逻辑层、表现层)重构项目,解决了集中式开发导致的代码臃肿问题。各层职责清晰,结合依赖注入实现解耦,提升了系统的可维护性、可测试性和可扩展性,为后续接入真实数据库奠定基础。
860 0
|
Java 开发者 Spring
Spring框架 - 深度揭秘Spring框架的基础架构与工作原理
所以,当你进入这个Spring的世界,看似一片混乱,但细看之下,你会发现这里有个牢固的结构支撑,一切皆有可能。不论你要建设的是一座宏大的城堡,还是个小巧的花园,只要你的工具箱里有Spring,你就能轻松搞定。
529 9
|
负载均衡 Java API
基于 Spring Cloud 的微服务架构分析
Spring Cloud 是一个基于 Spring Boot 的微服务框架,提供全套分布式系统解决方案。它整合了 Netflix、Zookeeper 等成熟技术,通过简化配置和开发流程,支持服务发现(Eureka)、负载均衡(Ribbon)、断路器(Hystrix)、API网关(Zuul)、配置管理(Config)等功能。此外,Spring Cloud 还兼容 Nacos、Consul、Etcd 等注册中心,满足不同场景需求。其核心组件如 Feign 和 Stream,进一步增强了服务调用与消息处理能力,为开发者提供了一站式微服务开发工具包。
1029 0
|
人工智能 前端开发 Java
DDD四层架构和MVC三层架构的个人理解和学习笔记
领域驱动设计(DDD)是一种以业务为核心的设计方法,与传统MVC架构不同,DDD将业务逻辑拆分为应用层和领域层,更关注业务领域而非数据库设计。其四层架构包括:Interface(接口层)、Application(应用层)、Domain(领域层)和Infrastructure(基础层)。各层职责分明,避免跨层调用,确保业务逻辑清晰。代码实现中,通过DTO、Entity、DO等对象的转换,结合ProtoBuf协议,完成请求与响应的处理流程。为提高复用性,实际项目中可增加Common层存放公共依赖。DDD强调从业务出发设计软件,适应复杂业务场景,是微服务架构的重要设计思想。
|
存储 消息中间件 缓存
支持百万人超大群聊的Web端IM架构设计与实践
本文将回顾实现一个支持百万人超大群聊的Web端IM架构时遇到的技术挑战和解决思路,内容包括:通信方案选型、消息存储、消息有序性、消息可靠性、未读数统计。希望能带给你启发。
780 0
支持百万人超大群聊的Web端IM架构设计与实践
|
XML Java 开发者
Spring底层架构核心概念解析
理解 Spring 框架的核心概念对于开发和维护 Spring 应用程序至关重要。IOC 和 AOP 是其两个关键特性,通过依赖注入和面向切面编程实现了高效的模块化和松耦合设计。Spring 容器管理着 Beans 的生命周期和配置,而核心模块为各种应用场景提供了丰富的功能支持。通过全面掌握这些核心概念,开发者可以更加高效地利用 Spring 框架开发企业级应用。
509 18

推荐镜像

更多