<transition on="submit">
<evaluate expression="validator.validate()"/>
</transition>
請求含 _eventId=submit 時執行。
| 切入點 | XML 元素 | 觸發時機 |
|---|---|---|
| Flow 啟動 | <on-start> | Flow 執行前 |
| State 進入 | <on-entry> | 進入 State 後,其他動作前 |
| 視圖渲染 | <on-render> | 進入渲染流程後,視圖生成前 |
| State 退出 | <on-exit> | 退出 State 前 |
| Flow 結束 | <on-end> | Flow 執行結束後 |
<view-state id="viewCart" view="viewCart">
<on-render>
<evaluate expression="productService.getProducts()" result="viewScope.products"/>
</on-render>
</view-state>
<action-state id="addToCart">
<evaluate expression="cart.addItem(productService.getProduct(productId))"/>
<transition to="productAdded"/>
</action-state>
純業務邏輯執行,無視圖渲染。
| 變量 | 範圍 | 生命周期 |
|---|---|---|
flowScope | Flow 級 | Flow 啟動→結束 |
conversationScope | 會話級 | 主 Flow 及所有 Subflow |
viewScope | 視圖級 | View State 進入→退出 |
requestScope | 請求級 | 單次 HTTP 請求 |
flashScope | 重定向級 | 當前請求+下次重定向請求 |
<!-- 保存到 Flow 範圍 -->
<evaluate expression="productService.getProducts()" result="flowScope.products"/>
<!-- 保存到會話範圍 -->
<set name="conversationScope.cart" value="mycart"/>
<!-- 從請求參數獲取 -->
<set name="requestScope.productId" value="requestParameters.productId"/>
@Service("productService")
public class ProductService {
private Map products = new HashMap<>();
public ProductService() {
products.put(1, new Product(1, "Bulldog", 1000));
products.put(2, new Product(2, "Chihuahua", 1500));
products.put(3, new Product(3, "Labrador", 2000));
}
public List getProducts() { return new ArrayList<>(products.values()); }
public Product getProduct(int id) { return products.get(id); }
}
<view-state id="viewCart" view="viewCart">
<on-render>
<evaluate expression="productService.getProducts()" result="viewScope.products"/>
</on-render>
<transition on="submit" to="viewOrder"/>
<transition on="addToCart" to="addProductToCart"/>
</view-state>
<subflow-state id="addProductToCart" subflow="addToCart">
<transition on="productAdded" to="viewCart"/>
</subflow-state>
<c:forEach var="product" items="${products}">
<tr>
<td>${product.description}</td>
<td>${product.price}</td>
<td>
<a href="${flowExecutionUrl}&_eventId=addToCart&productId=${product.id}">[add to cart]</a>
</td>
</tr>
</c:forEach>
默認 Unified EL(JSP 2.1 標準),可通過 flow-builder-services 配置切換 OGNL。Unified EL 支持方法調用、隱式對象、Lambda 表達式(EL 3.0+)。