上篇博客我们说Spring web Flow与业务结合的方式主要有三种,下面我们主要介绍一下第三种的应用方式
3,执行到<action-state> 元素
SpringWeb Flow 中的这个 <action-state> 是专为执行业务逻辑而设的 state 。如果某个应用的业务逻辑代码既不适合放在transition 中由客户端来触发,也不适合放在 Spring Web Flow 自定义的切入点,那么就可以考虑添加<action-state> 元素专用于该业务逻辑的执行。更倾向于触发某个事件来执行。
action-state 示例:
<action-state id="addToCart">
<evaluate expression="cart.addItem(productService.getProduct(productId))"/>
<transition to="productAdded"/>
</action-state>
添加subflow 结点
商品列表已经实现了,接下来操作步骤为:
- 实现 Cart 和 CartItem 两个业务类
- 在 shopping.xml 中添加配置
- 在 /WEB-INF/flows 目录下添加 addToCart.xml
- 在 webflow-config.xml 中添加 addToCart.xml 的位置
- 修改 viewCart.jsp 页面
具体demo实现:
Cart:
package samples.webflow;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//购物车的实现类
public class Cart implements Serializable {
private static final long serialVersionUID = 7901330827203016310L;
private Map<Integer, CartItem> map = new HashMap<Integer, CartItem>();
//getItems 用于获取当前购物车里的物品
public List<CartItem> getItems() {
return new ArrayList<CartItem>(map.values());
}
//addItem 用于向