我正在newMessage.jsp
上显示视图/messages/new
。成功发送新邮件后,我想将用户重定向到他来自的页面。这可能是很多页面,因为我的新视图中嵌入了我的新消息链接(收件箱,投诉页面等)。
实验#1
我尝试了return "redirect:" + request.getHeader("Referer")
,但它不起作用。原因是,每次用户点击提交时,我都会将他发送到相同的网址(/messages/new
),因此Referer
标题在点击“提交后”设置为/messages/new
“
实验#2
然后我尝试设置@RequestParam
(这似乎是正确的事情)。因此,我会在“收件箱”视图中调用/messages/new?referer=/inbox
,在“投诉”视图中调用/messages/new?referer=/complaints
,依此类推。但同样,当用户点击“提交”时,action="new"
会被触发,我会丢失我传递的referer
参数。
实验#3
最后,我决定将action="new"
修改为action="new?referer=${referer}"
。这工作得很好,除了referer
为空时,网址为/messages/new?referer=
,看起来不太漂亮。
实验#4
即使我使用(3),当我最终(成功发送消息后)在Controller中执行return "redirect:" + my_domain_name + referer ;
时,请求将使用旧值referer
传递并生成网址为my_domain_name/referer?referer=value_from_previous_call
,而应为my_domain_name/referer
答案 0 :(得分:1)
${referer}
引用名为referer
的请求属性,而您将其作为请求参数传递。
除非您手动将该参数存储为属性,否则您需要使用以下代码:${param.referer}
。
答案 1 :(得分:1)
这可能不太好看。但是,我们可以假设referer
具有某种价值:
1:referer
实际上有一个值,然后进行第三次实验。
2:有点复杂,那么你必须检查referer
中的值,如果没有设置,那么设置一个,你应该有一个默认页面,当referer
为空时,可能是/messages/inbox
,最终需要通过临时重定向(301)或元标记刷新页面。
答案 2 :(得分:0)
嗯,唯一明显的解决方案是:
从控制器执行return "redirect:" + referer ;
,它会将页面重定向到调用/messages/new
的位置。