struts 2のchainについて

1952 ワード

actionの戻り結果タイプがchainの場合、chainブロッキングが機能し、現在のactionとターゲットactionを値スタックに押し込みます.
では、ターゲット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をライフサイクルとする.リクエストがビューに戻ると、チェーンの内容は固定され、保存されません.次のリクエストが開始されると、チェーンが再生成されます.