0
我有一個比較複雜的webflow設置,允許在流程中向前和向後導航。這個webflow有一個我們稱之爲flowModel的後臺對象。對Spring Webflow中模型屬性字段變化的反應
因此,視圖狀態是這個樣子:
<view-state id="beginPage" model="flowModel" view="begin">
// contents
</view-state>
<view-state id="multipleChoicePage1" model="flowModel" view="choicePage1">
// contents
</view-state>
<view-state id="multipleChoicePage2" model="flowModel" view="choicePage2">
// contents
</view-state>
<view-state id="summaryPage" model="flowModel" view="summaryPage">
// contents
</view-state>
當我選擇從選擇頁面的一個東西,查看它的摘要,然後回去在流動,使不同,會出現問題選擇。摘要頁面仍將顯示從原始路徑計算出的值。
有沒有在webflow中確定模型中的字段值是否已更改的方法?如果是這種情況,我可以手動更改<on-exit>
或<action-state>
中的「計算」值。否則,我唯一的想法是在<view-state>
內的<on-start>
或<on-render>
階段附加一個PropertyChangeListener。
任何想法/建議,將不勝感激。
更新
我想通了,通過<on-exit>
方法被打的時候,新的價值觀已經綁定到模型。所以,我最後做的:
<view-state id="beginPage">
<on-render>
<evaluate expression="flowController.enterBeginPage(flowRequestContext)" />
</on-render>
<!-- Transitions -->
<on-exit>
<evaluate expression="flowController.exitBeginPage(flowRequestContext)" />
</on-exit>
流量控制器內部,在渲染和退出方法是這樣的:
public void onRenderBeginPage(RequestContext requestContext) {
MyForm form = requestContext.getFlowScope().get("flowModel",MyForm.class);
requestContext.getFlowScope().put("originalFlowModel", form);
}
public void onExitBeginPage(RequestContext requestContext) {
MyForm form = requestContext.getFlowScope().get("flowModel",MyForm.class);
MyForm originalForm = requestContext.getFlowScope().get("originalFlowModel", MyForm.class);
requestContext.getFlowScope().remove("originalFlowModel");
if (!form.getOption().equals(originalForm.getOption()) {
// do something
}
}
它似乎工作不夠好,即使它是一個一點kludge。
以上是真實的簡化版本。 我試圖在模型對象上放置一個PropertyChangeListener,但是隻要我點擊一個視圖狀態(它通過一些行爲和決策狀態定義),該監聽器就消失了。我最終不得不實施一個on-enter方法來將模型的一個副本放在流程範圍中,並且在出口處檢查該模型。 – Jason
我明白了。如此類似的想法,除了你在流量控制器外部而不是xml – rptmat57
是的。在狀態圖中繪製時,流程太複雜,無法在XML中進行建模,因此大多數情況下每個操作狀態在流量控制器中都有一個方法。 – Jason