關於Action中ValidateXXX方法校驗一次失敗後\導致以後一直返回input視圖的情況

問題:
    使用struts2的validateXXX()進行驗證,出錯後自動返回之前的畫面,但是Form中的數據全部丟失了,如何才能保存出錯前的Form是要解決的問題。

調查:
    調查後發現如果把Action的scope設置成session就應該可以在session範圍內保存Form數據,但是struts2不支持直接設定Action的scope屬性,沒關係,有辦法,因爲把bean的注入交給了spring容器,spring自然可以管理它自己的bean,只需要在spring的配置文件中定義Action的bean的時候把scope設置爲session就可以了。
    如果在spring中定義bean時指定scope爲session,那麼請小心使用struts2的Action中的validateXXX()方法,因爲校驗出錯的狀態會一直保存直到session結束(當然這是因爲struts2的默認攔截器在作怪)。

解決方案:
STEP 1:
    定義bean的作用域爲session (注1)
    例:  <bean id="LoginAction" class="testLogin.action" scope="session">
                <property name....../>
          </bean>
STEP 2.
    因爲校驗的錯誤狀態ActionError會在session範圍內保存,導致每次的Action請求會直接跳轉到input視圖。以下準備了兩種解決辦法
    ①重寫默認的負責校驗的攔截器。
    ②放棄使用validateXXX()這個方法,在Action中進行校驗,使用ActionMessage代替ActionError。

注1:同時不要忘記在web.xml中追加一個監聽。
    <listener>
        <listener-class>
                org.springframework.web.context.request.RequestContexgListener
        </listener-class>
    </listener>

ok,到此爲止問題已經解決,需要說明的是,解決問題的辦法並不只是這一種,根據具體情況可以採用不同的方法,例如通過hidden項目傳遞Form就是一種不錯的方法。


原文鏈接:http://tjmljw.iteye.com/blog/1446639

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章