【问题标题】:redo the original request after redirection getRequestDispatcher重定向后重做原始请求 getRequestDispatcher
【发布时间】:2016-02-11 16:52:55
【问题描述】:

嘿, 我有一个拦截所有请求(GET & POST)的代码,并最终使用表单重定向到另一个页面。 我希望当用户发布表单时,执行初始截获的请求

我的实际代码:

public void doFilter(ServletRequest originalRequest, ServletResponse res, FilterChain chain){
  originalRequest.getRequestDispatcher("/message").forward(request, res);
}

...

@RequestMapping("/message", method=GET)
public void showMessageForm(...){
...
}
@RequestMapping("/message", method=POST)
public void messageOk(ServletResponse res, ModelAndView mav){
//redirect to the originalRequest.
  ????
}

originalRequest 可以是 GET 或 POST。如果是帖子,我也想传递表单的内容。

谢谢!

【问题讨论】:

  • messageOk 会做什么?您是否希望它将它们发送回请求的原始 URL?
  • 是的。如果原始请求是 POST,则作为帖子。
  • 您不能使用 HTTP 重定向到 POST。但我不确定这是你想要做的。需要更多信息。你的 messageOk 处理程序的目的是什么?
  • 在用户的某些操作之后只显示一次页面。有时用户发布,有时获取,拦截器在端点之前捕获请求以显示此消息页面。用户在页面上填写表单后(通过 POST 发送),中断的请求必须运行。
  • 显示的页面是否有某种“确定”或“继续”链接或用户将与之交互的按钮?

标签: java url-redirection requestdispatcher


【解决方案1】:

您的 messageOk 方法将需要返回一个页面,该页面包含一个表单,其中包含他们传递的每个字段的隐藏字段 + 一个确定按钮。所以像:

<form method="POST or GET" action="origin url">
  <input type="hidden" name="param1" value="value for param1"/>
  ... for each input ...
  <input type="hidden" name="paramN" value="value for paramN"/>
  <input type=submit" value="Continue"/>
</form>

只要您没有上传文件的 POST,这应该可以工作。您可能希望在您的应用程序中考虑更简单的流程,例如仅在有人登录时才强制此页面。

【讨论】:

    猜你喜欢
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2012-04-15
    • 2011-10-15
    • 1970-01-01
    相关资源
    最近更新 更多