如何根据@RequestParam重定向到新页面

时间:2012-10-02 11:05:18

标签: java spring

我正在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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

这可能不太好看。但是,我们可以假设referer具有某种价值:

1:referer实际上有一个值,然后进行第三次实验。

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

答案 2 :(得分:0)

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

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