在用分派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>
怎么解决呢?我们知道,重定向可以解决页面刷新带来的数据的重复提交的问题,我们自然可以利用重定向的方式来解决这个问题。但是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>