今日、恐ろしいレガシー Spring Web Flow アプリの新機能のテストを作成しようとしているときに、この問題に遭遇しました。私は Spring Web Flow を専門的に理解しているふりをしているわけではありませんが、コードに飛び込むと、とから呼び出される から<on-render>
トリガーされるように見えました。そこには厄介なネストされたブロックがいくつかありますが、すべてがとの属性に依存しているように見えました。ViewState.render(...)
ViewState.resume(...)
ViewState.doEnter(...)
if-else
responseAllowed
responseComplete
ExternalContext.
テストで最初の<on-render>
ブロックのみが実行される理由はMockExternalContext
、Spring のデフォルトが aanull
responseAllowed
でありresponseComplete
、最初の応答後に false に戻らないためです。そこで<on-render>
、独自のExternalContext interface
.
MockExternalContext
次の2つの変更を加えて、文字通り既存のものをコピーして貼り付けました。
responseAllowed
デフォルトを true に設定します。
private Boolean responseAllowed = true;
関数を上書きしてrecordResponseComplete
、応答を完了に設定しないようにします。
public void recordResponseComplete() {
//responseComplete = true; (Yes, this is literally just commented out)
}
これは恐ろしいハックであり、おそらく副作用がありますが、Spring Web Flow はとにかく恐ろしいフレームワークであり、このソリューションは私にとってはうまくいきました。YMMV。