spring webflow(流程)

Spring WebFlow的关注点的层次比Sping MVC 或者是 Structs 更高。不只是关注于如何e构建Web界面,更加关注于流程,也就是Flow。

Flow标签:<flow/>是根元素,所有的定义从这个元素开始。    
State标签:<view-state/>用来表示一个拥有View的State。在这个标签里面,指定了用于描述View的文件的位置。这个位置是约定俗成的,由设置的id来指定。比如<view-state id=”enterBookDetails”/>,那么这个State的View的描述文件为enterBookDetails.xhtml。如果这个Flow的定义文件存放在/WEB-INF/xxxx/booking/目录下面,那么这个View的定义文件就是/WEB-INF/xxxx/booking/enterBookDetails.xhtml。    
transaction标签:<transaction/>是view-state的子标签,定义一个页面转向,比如<transaction on=”submit” to=”reviewBooking”/>,则是说明了当触发submit事件的时候,转到下面一个state,转向的state的id为reviewBooking。    
end-state标签:<end-state/>这个表示flow的出口,如果某个transaction指向了一个end-state标签,表示这个flow已经结束。一个flow可以有多个end-state标签,表示多个出口。

Actions:一个Spring WebFlow里面很重要的概念,从上面可以看出,view-state、transaction、end-state标签只是表示Flow的流程,页面跳转,里面没有说明业务逻辑的操作。Action就是用来调用这些业务逻辑操作的。    
在下面几个点中,我们可以调用Action:

这个标签可能是Action里面最常使用的标签,用Spring定义的表达式来确定一个Action去调用哪个Spring Bean的方法,然后返回值、返回类型是什么。

下面是login-webflow.xml里面的例子

<action-state id="realSubmit">  
<evaluate expression="authenticationViaFormAction.submit(flowRequestContext, flowScope.credentials, messageContext)" />    
<transition on="warn" to="warn" >    
<evaluate expression="giantCasInterceptor.doBind(flowRequestContext, flowScope.credentials)" />    
</transition>    
 <transition on="success" to="sendTicketGrantingTicket" >    
<evaluate expression="afterLoginSuccess.doBind(flowRequestContext, flowScope.credentials)" />    
</transition>    
<transition on="error" to="generateLoginTicket" >    
 <evaluate expression="giantCasInterceptor.doBind(flowRequestContext, flowScope.credentials)" />    
</transition>    
</action-state>

其中afterLoginSuccess对应cas-servlet.xml<bean id="afterLoginSuccess" class="com.giant.validate.AfterLoginSuccess" />

你可能感兴趣的:(spring webflow(流程))