博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Portlet中的webflow
阅读量:6657 次
发布时间:2019-06-25

本文共 1954 字,大约阅读时间需要 6 分钟。

和Spring其他框架一样,对于webflow,Spring也提供了2个系列,一个是servlet级别的webflow,它在org.springframework.webflow.mvc.servlet 包中,一个是portlet级别的webflow,它在org.springframework.webflow.mvc.portlet包中,我们这里讨论portlet级别的FlowHandler。

FlowHandlerAdapter,正如Spring官方注释所说的,它将特定的flow定义文件关联到Flow Handler上。它实现了HandlerAdaptor接口,这个接口的作用是让Spring的DispatcherPortlet对应各种类型的request(比如actionRequest,resourceRequest,renderRequest,event)可以用特定的Handler来进行处理。这个接口定义了如下方法:

 
  1. public interface HandlerAdapter {  
  2.     boolean supports(Object handler);   
  3.  
  4.     void handleAction(ActionRequest request, ActionResponse response, Object handler) throws Exception;  
  5.  
  6.     ModelAndView handleRender(RenderRequest request, RenderResponse response, Object handler) throws Exception;  
  7.  
  8.     ModelAndView handleResource(ResourceRequest request, ResourceResponse response, Object handler) throws Exception;  
  9.  
  10.     void handleEvent(EventRequest request, EventResponse response, Object handler) throws Exception;  
  11.  
  12. }  

 

那么如何处理呢,在FlowHandlerAdapter中给出了对应的实现,我们以render为例,它的代码如下:

 
  1. public ModelAndView handleRender(RenderRequest request, RenderResponse response, Object handler) throws Exception {  
  2.         FlowHandler flowHandler = (FlowHandler) handler;  
  3.         checkAndPrepare(request, response);  
  4.         populateConveniencePortletProperties(request);  
  5.         FlowException e = clearActionRequestFlowException(request, response, flowHandler);  
  6.         if (e != null) {  
  7.             return handleException(e, flowHandler, request, response);  
  8.         }  
  9.         String flowExecutionKey = flowUrlHandler.getFlowExecutionKey(request);  
  10.         if (flowExecutionKey != null) {  
  11.             return resumeFlowRender(request, response, flowHandler, flowExecutionKey);  
  12.         } else {  
  13.             MutableAttributeMap input = flowHandler.createExecutionInputMap(request);  
  14.             if (input == null) {  
  15.                 input = defaultCreateFlowExecutionInputMap(request);  
  16.             }  
  17.             return startFlowRender(flowHandler, input, request, response);  
  18.         }  
  19.     } 

从这里我们可以看出,它在第2行中从参数获得FlowHandler对象,在3行做初始化工作,第4行从render request中填出必要的Portlet属性。

 

待续。。。

 

本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1159734,如需转载请自行联系原作者
你可能感兴趣的文章
021、镜像小结(2019-01-14 周一)
查看>>
VS CODE 快捷键
查看>>
一只老鼠夹
查看>>
苹果新的编程语言 Swift 语言进阶(一)--综述
查看>>
windows7 修改环境变量 和 用不用重启电脑的讨论
查看>>
我的第一篇paper
查看>>
分页查询
查看>>
mysql中Timestamp,time,datetime 区别
查看>>
margin啥时候取较大值
查看>>
MVC Core
查看>>
每天一道LeetCode--172. Factorial Trailing Zeroes
查看>>
孤儿进程与僵尸进程[总结]
查看>>
C#委托(delegate)
查看>>
openStack虚拟机error 错误状态基于差异镜像+基镜像做恢复
查看>>
Android自动化测试中AccessibilityService获取控件信息(2)-三种方式对比
查看>>
设计模式汇总
查看>>
【书签】个人常用网站整理及应用推荐
查看>>
FJUT3565 最大公约数之和(容斥)题解
查看>>
java实现顺序表
查看>>
hibernate.cfg.xml 配置(摘录)
查看>>