0

我正在显示视图newMessage.jsp/messages/new成功发送新消息后,我想将用户重定向到他来自的页面。这可能是很多页面,因为我的很多视图(收件箱、投诉页面等)中都嵌入了我的新消息链接。

实验#1

我试过return "redirect:" + request.getHeader("Referer")了,但它不起作用。原因是,每次用户单击提交时,我都会将他发送到相同的 url ( /messages/new),因此在他单击“提交”后,Referer标题会设置为/messages/new

实验#2

然后我尝试设置 a @RequestParam(这似乎是正确的做法)。因此,我会/messages/new?referer=/inbox在收件箱视图、/messages/new?referer=/complaints投诉视图等中调用。但是同样,当用户单击“提交”时,action="new"会触发并且我丢失了referer我传递的参数。

实验#3

最后,我决定action="new"action="new?referer=${referer}". 这工作得很好,除了当referer它为空时,url 将是/messages/new?referer=,这看起来不太漂亮。

实验#4

即使我使用(3),当我最终(成功发送消息后)return "redirect:" + my_domain_name + referer ;在控制器中执行时,请求正在以旧值传递,referer并且生成的 URLmy_domain_name/referer?referer=value_from_previous_call应该只是my_domain_name/referer

4

3 回答 3

1

${referer}指的是名为的请求属性referer,而您将其作为请求参数传递。

除非您手动将该参数存储为属性,否则您需要改用以下内容:${param.referer}.

于 2012-10-02T11:11:50.700 回答
1

这可能不漂亮。但是,我们可以假设要么referer有一些价值,要么没有:

1:referer实际有值,然后做第三个实验。

2:有点复杂,然后你必须检查一个值referer,如果没有设置,然后设置一个,你应该有一个默认页面,当referer为空时,可能是/messages/inbox,最后需要刷新页面,通过临时重定向 (301) 或元标记。

于 2012-10-02T11:21:57.010 回答
0

好吧,唯一明显的解决方案是:

从控制器执行return "redirect:" + referer ;,它会将页面重定向到/messages/new调用的位置。

于 2012-10-02T11:30:11.280 回答