Spring Web Flow 2.0入门 - 用Unified EL实现业务逻辑2011-02-01 IBM 吕焱飞到现在为止,这个购物车应用只是实现了页面之间的跳转,接下来我们要实现与业务逻辑相关的功能。由于本教程的重点在于介绍如何应用 Spring Web Flow ,所实现的业务比较简单,与实际应用有较大的距离,请读者谅解。业务的逻辑涉及到数据的获取、传递、保存,相关的业务功能函数的调用等内容,这些功能的实现都可用 Java 代码来完成,但定义 Spring Web Flow 的语法与 Java 是无关的,这就要求 Spring Web Flow 提供与 Java 代码的整合机制。要了解这种机制,关键在于搞清楚两个问题:业务逻辑代码在什么时候被调用?业务逻辑代码在调用后得到的数据如何保存、传递?业务逻辑代码在什么时候被调用?在 Spring Web Flow 中,业务逻辑代码的执行可由以下三种情形来触发:客户端请求中包含了 _eventId 参数执行到框架自定义的切入点执行到 <action-state> 元素客户端请求中包含了 _eventId 参数这种方式一般用在 state 之间的 transition ,通过指定 _eventId 参数的值,表明了客户的行为,从而导致相应事件的发生,在 Spring Web Flow 的定义文件中可以通过 evaluate 元素来指定要处理的业务逻辑。参看清单21:清单 21 transition 示例
<transition on="submit">
<evaluate expression="validator.validate()" />
</transition>清单 21 的代码表示,当客户端的请求中包含“ _eventId=submit ”,则 evaluate 元素中 expression 属性所指明的表达式会被执行,即 validator 对象的validate 方法会得到调用。执行到框架自定义的切入点Spring Web Flow 定义了 5 个切入点,通过 flow 定义文件的配置,可在这 5 个切入点插入相关业务逻辑代码。表 2 Spring Web Flow 自定义的切入点
| 切入点名称 | XML 元素名称 | 触发时刻 |
| flow start | on-start | flow 执行之前 |
| state entry | on-entry | 进入某个 state 之后,做其他事情之前 |
| view render | on-render | 在进入 view 的 render 流程之后,在 view 真正 render出来之前 |
| state exit | on-exit | 在退出 state 之前 |
| flow end | on-end | flow 执行结束之后 |