風行天下

          JAVA太極
          posts - 4, comments - 10, trackbacks - 0, articles - 55
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          Web系統(tǒng)的用戶界面往往是通過html腳本在瀏覽器中顯示出來,其中瀏覽器的刷新功能將重新提交當前頁面的URL請求。這就會出現(xiàn)如下情況:從一個新增編輯頁面存盤后返回到一個記錄列表頁面,在這個列表頁面使用刷新鍵的時候,用戶的意圖應該是想刷新當前的記錄列表,但是這時候提交的會是新增記錄存盤的請求,這樣就可能出現(xiàn)向服務器重復提交導致錯誤。
              如何能夠解決這個問題,首先要認識到提交存盤操作后的列表頁面的URL請求與直接提交顯示列表頁面的URL請求對于客戶端顯示的刷新操作帶來的不同效果,我們要是能將存盤操作后在客戶端顯示出的記錄列表頁面在客戶端的頁面屬性和直接請求列表的的頁面屬性一樣的話,就能夠讓刷新操作只提交列表顯示的請求。我們可以利用java servlet所提供的redirect功能來將存盤功能和顯示記錄列表分開,在完成了存盤操作后給response設定顯示記錄列表的請求重定向返回到客戶端瀏覽器,這樣瀏覽器中顯示的列表頁面的請求屬性是直接請求記錄列表顯示的URL,直接刷新頁面的話則提交的也是記錄列表頁面顯示的請求。
              在目前流行的struts框架中,實現(xiàn)重定向很方便,只需要在配置文件struts-config.xml里面中的<forward腳本中加上redirect屬性值為“true”,例如以下一個配置
              
          <action path  = "/saveRecord"
                      type  = "xxx.SaveRecordAction"
                      name  = "recordForm">
                      <forward name="success" path="/recordList.do" redirect="true"/>
                      <forward name="fail" path="/recordEdit.do" redirect="true"/>
              </action>


               設定記錄存盤操作(/saveRecord.do)請求成功完成后,重定向到記錄列表顯示(/recordList.do)請求去,若操作失敗則重定向到編輯界面(/recordEdit.do)繼續(xù)修改。
              需要注意的是重定向后的請求不會自動獲得當前請求的request數(shù)據(jù),當然包括各種form提交的數(shù)據(jù),所以在實際運用中最煩人的可能是將重定向請求所需的各類參數(shù)設定到重定向的URL字串中。
              對上面的配置例子,假設我們的/recordList.do請求需要一個參數(shù)是record_id=xxx,我們可以在xxx.SaveRecordAction里用以下代碼來設定幾個參數(shù):

              
          public ActionForward execute(ActionMapping mapping,
                                           ActionForm form,
                                           HttpServletRequest request,
                                           HttpServletResponse response)
                      throws Exception
              {
               ...//略去處理存盤代碼

                  ActionForward actForward = actionMapping.findForward("success");
                  String path = actForward.getPath();
                  path += "record_id=xxx";
                  return new ActionForward(actForward.getName(),path,true);
                  //返回一個重定向ActionForword對象
                  
               }






          參與論壇討論:http://www.matrix.org.cn/forum.asp
          更多技術文章:http://www.matrix.org.cn/article.asp
          Matrix java門戶:http://www.matrix.org.cn

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 呼玛县| 晋中市| 南江县| 台东县| 桐城市| 娄烦县| 沂源县| 怀仁县| 昆山市| 临江市| 溧阳市| 潞城市| 郓城县| 眉山市| 云南省| 蕲春县| 阳东县| 荆州市| 沈丘县| 灵宝市| 冷水江市| 会昌县| 吉林省| 萨迦县| 济阳县| 崇信县| 昭觉县| 卓资县| 项城市| 民乐县| 临泉县| 三穗县| 铜山县| 隆回县| 扶风县| 彰化市| 高淳县| 哈尔滨市| 祁东县| 新郑市| 莒南县|