struts 2のchainについて
actionの戻り結果タイプがchainの場合、chainブロッキングが機能し、現在のactionとターゲットactionを値スタックに押し込みます.
では、ターゲットactionの戻り結果がchainだったら?もちろんターゲットactionのターゲットも値スタックに押し込む.
つまり、
someviewにs:debugラベルを付けるとvalueStackに4つのオブジェクトが表示されます.
でも変えたら、
Bビューでb 2にコミットしてsomeviewに移動すると、値スタックには3つのオブジェクトしかなく、DefaultTextProvider以外はBとCで、Aはもうありません.
すなわちactionチェーンはrequestをライフサイクルとする.リクエストがビューに戻ると、チェーンの内容は固定され、保存されません.次のリクエストが開始されると、チェーンが再生成されます.
では、ターゲットactionの戻り結果がchainだったら?もちろんターゲットactionのターゲットも値スタックに押し込む.
つまり、
<action name="a" class="A">
<result name="success" type="chain">
<param name="actionName">b</param>
</result>
</action>
<action name="b" class="B">
<result name="success" type="chain">
<param name="actionName">c</param>
</result>
</action>
<action name="c" class="C">
<result name="success">someview</result>
</action>
someviewにs:debugラベルを付けるとvalueStackに4つのオブジェクトが表示されます.
でも変えたら、
<action name="a" class="A">
<result name="success" type="chain">
<param name="actionName">b</param>
</result>
</action>
<action name="b" class="B">
<result name="success">Bview</result>
</action>
<action name="b2" method="bm" class="B">
<result name="success" type="chain">
<param name="actionName">c</param>
</result>
</action>
<action name="c" class="C">
<result name="success">someview</result>
</action>
Bビューでb 2にコミットしてsomeviewに移動すると、値スタックには3つのオブジェクトしかなく、DefaultTextProvider以外はBとCで、Aはもうありません.
すなわちactionチェーンはrequestをライフサイクルとする.リクエストがビューに戻ると、チェーンの内容は固定され、保存されません.次のリクエストが開始されると、チェーンが再生成されます.