在实际过程中,对message 进行了删除或者标记已读的操作后,action 进行redirect ,希望重新进入messaeg 显示页面:
<result name="readOrDeleteMessages" type="redirectAction">messageAction!findMessages?userId=${userId}&messageType=inAll&timeSeconds=${timeSeconds}
</result>
但页面不能刷新,发现findMessages 这个Action 已经执行过了,并且数据库里的数据已经完成了修改操作。
baidu 了一下,都没有找到适用的方法。
我想到了之前写过的一个PHP 网页,使用了 AJAX 来进行数据操作,返回原始页面时显示的也还是当时的方法。原因在于前后两个URL 的请求是一样的,PHP 页面当然不会刷新页面。为此,我在URL 后面添加了当前时间来使每个URL 都不可能相同。那个问题很快就解决了
但是在这里,我也用到了在URL 中添加时间,但还是不能刷新页面。因为操作前的数据放在session中,重新进入页面时,从session 中取出的数据相同,因此没有刷新JSP 页面。
然后我想到了程序自动刷新页面的方式来实现。因为删除和标记已读请求都是使用 JQuery 的$.post 来实现的,我就可以在 ajax 的回调函数来实现页面刷新
但是又因为这个我自己用来练习的项目,我大胆使用了 frame 页面框架来实现页面的显示。主页面分三个部门:
<frameset rows="20%,80%">
<frame noresize="noresize" frameborder="0" scrolling="no" src="jsp/top.jsp">
<frameset cols="14%,86%">
<frame noresize="noresize" frameborder="0" scrolling="no" src="jsp/middleLeft.jsp">
<frame name="mainContent" noresize="noresize" frameborder="0" scrolling="yes" src="jsp/middleRight.jsp">
其中,显示主要操作界面的frame 名为 mainContent,我只希望刷新 mainContent frame ,如果刷新主页面
http://localhost:8092/SSH/loginValidAction!validLogin.action
则是重新进入系统,还得重复一遍刚才的所有操作
baidu 了一下,
window.parent.frames["bottom"].location.reload();
JavaScript这个语句可以实现我想要的功能:
我的JS 代码如下:
$.post(
$url,
function(){
window.parent.frames["mainContent"].location.reload();}
)