Struts 1中的Post/Redirect/Get

3

我有一个Struts 1的Web应用程序,我想实现post/redirect/get以便在用户按下浏览器的后退/前进按钮时强制重定向。主要问题是我们想要实现会话超时。当会话已过期时,我们将重定向到“sessionExpired”页面,但是如果用户在浏览器上单击返回,则希望隐藏先前页面的信息。我已经添加了代码来删除操作中的缓存:

response.setHeader("Cache-Control", "private, no-store, no-cache, must-revalidate");
response.setHeader("Pragma", "no-cache");

但是这样会在浏览器缓存中抛出“未找到页面”,我们希望运行一些重定向到页面而不是“无缓存”页面的内容。这就是为什么我正在尝试实现PRG。

2个回答

2

Post/Redirect/Get模式并不是在用户按下“返回”按钮时强制重定向。它是指在成功的POST请求后发送重定向。

在Struts 1中,定义forward时加上redirect="true",如果你返回这个forward,Struts将会发送一个重定向。

<forward name="success" path="/index.do" redirect="true"/>

但是如果我们在浏览器上按下后退/前进按钮,操作将不会运行,因此重定向将不会被发送。至少在Firefox中是这样的。 - hadescz
PRG模式的目的正是为了避免重新提交POST请求。您有一个产品列表,点击“添加产品”,使用POST提交表单,并在创建产品后向产品列表发送重定向。如果用户按下“返回”按钮,它将返回到产品创建页面,然后返回到产品列表,而不会重新提交产品创建。 - JB Nizet
我已经添加了我的问题的更多信息,无论如何都非常感谢。 - hadescz
PRG模式对于解决这个问题没有任何帮助。它不是你想象的那样。请阅读链接的维基百科页面。 - JB Nizet

0

将这些行设置在您的视图(Jsp页面)上。在指令标记之后的页面顶部。

    response.setHeader("Cache-Control", "no-cache");
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 0);
response.setHeader("Pragma", "no-cache"); 

并在struts中使用redirect="true"


抱歉,同样的问题,虽然我们没有收到“页面未在缓存中找到”的消息,但在浏览器上点击返回并重定向到页面之间的过程中,我们没有运行任何操作。 - hadescz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接