在用分派action的時候,我有兩個頁面addnews.jsp、listnews.jsp,在NewsAction.java中有兩個方法:addNews(),listNews()。當我在addnews.jsp中提交表單到action中的addNews()中,在里面我執行完插入數據庫的操作以后,我希望轉向到listnews.jsp中,所以一般想到的都是寫:return listNews(mapping, form, request, response);然后再listNews()方法中我執行了查詢數據庫的操作,最后我再forword到listnews.jsp,這個流程應該是非常清晰的,但是問題出來了,當我們增加新的文章以后,我們返回到列表界面,但是url路徑仍然是
http://localhost:8080/newstest/newsAction.do?method=addNews 那么這就要出現問題了,當我們不斷的刷新頁面的時候,我們會發現,列表中增加了很多重復的數據,這是因為刷新url路徑時,請求還是從插入數據庫的操作開始的,所以一遍遍的執行插入操作,造成了頁面的重復提交。
怎么解決呢?我們知道,重定向可以解決頁面刷新帶來的數據的重復提交的問題,我們自然可以利用重定向的方式來解決這個問題。但是struts的action里面mapping.findword();跳轉的話,默認的是在工程文件夾里面找要跳轉的頁面。這種情況,怎么解決呢?
修改struts-config.xml 文件, 在action里面有一個redirect重新定向的屬性,struts中默認的是false,添加這個屬性,改成true,在forword中寫上要跳轉頁面的絕對或者相對地址就行了
修改如下:
<action-mappings>
<action attribute="newsActionForm" name="newsActionForm"
input="/addnews.jsp" path="/newsAction" parameter="method"
scope="request" type="com.yongtree.news.action.NewsAction">
<forward name="list" path="/listnews.jsp" redirect="true"></forward>
<forward name="error" path="/addnews.jsp"></forward>
</action>
</action-mappings>