在拦截器重定向请求中重新注入 postdata

发布于 2024-11-27 18:26:02 字数 2030 浏览 4 评论 0原文

事情是这样的,

为了模仿 grails 对一个表单进行多次提交的方式,我实现了这个拦截器,这样当它遇到如下 url 时:
/whatever-url/${controllerName}/index 它重定向到 /whatever-url/${controllerName}/${submitName}

我有两个问题,首先它是用 get 方法重定向的,其次我没有保留 jsp 中原始表单的 postData,有人知道如何在重定向请求中将其设置回来吗?
这是拦截器类:

   public class ControllerIndexInterceptor extends HandlerInterceptorAdapter {

    private static String[] redirects = {"edit", "delete"};

        /**
         * {@inheritDoc}
         */
        @Override
        public boolean preHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler) throws Exception {
            String param = null;
            for (String redirect : redirects) {
                if((param = request.getParameter(redirect)) != null){
                    response.sendRedirect(request.getContextPath()+request.getServletPath()+
transformURI(request.getPathInfo(), redirect, handler));
                    return false;
                }
            }
            return true;

        }

答案:

   public class ControllerIndexInterceptor extends HandlerInterceptorAdapter {

    private static String[] redirects = {"edit", "delete"};

        /**
         * {@inheritDoc}
         */
        @Override
        public boolean preHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler) throws Exception {
            String param = null;
            for (String redirect : redirects) {
                if((param = request.getParameter(redirect)) != null){
                    request.getRequestDispatcher(request.getServletPath()+
transformURI(request.getPathInfo(), redirect, handler)).forward(request,response);
                    return false;
                }
            }
            return true;

        }

Here's the thing,

In order to imitate the way grails does multiple submits for one form, I implemented this interceptor, so that when it encounters an url such as :
/whatever-url/${controllerName}/index it redirects to /whatever-url/${controllerName}/${submitName}

I have two problems, first it is redirected with a get method and second I don't keep the postData from the original form that was in the jsp, anyone has an idea how to set this back in the redirected request ?

Here is the interceptor class :

   public class ControllerIndexInterceptor extends HandlerInterceptorAdapter {

    private static String[] redirects = {"edit", "delete"};

        /**
         * {@inheritDoc}
         */
        @Override
        public boolean preHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler) throws Exception {
            String param = null;
            for (String redirect : redirects) {
                if((param = request.getParameter(redirect)) != null){
                    response.sendRedirect(request.getContextPath()+request.getServletPath()+
transformURI(request.getPathInfo(), redirect, handler));
                    return false;
                }
            }
            return true;

        }

Answer :

   public class ControllerIndexInterceptor extends HandlerInterceptorAdapter {

    private static String[] redirects = {"edit", "delete"};

        /**
         * {@inheritDoc}
         */
        @Override
        public boolean preHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler) throws Exception {
            String param = null;
            for (String redirect : redirects) {
                if((param = request.getParameter(redirect)) != null){
                    request.getRequestDispatcher(request.getServletPath()+
transformURI(request.getPathInfo(), redirect, handler)).forward(request,response);
                    return false;
                }
            }
            return true;

        }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

弄潮 2024-12-04 18:26:02

IMO response.sendRedirect() 将向浏览器发送重定向状态代码,该浏览器最终将发出新请求,这就是您收到 GET 请求的原因。这也是无法获取 POST 数据的原因(因为它完全是一个新的且不同的请求)。请改用 request.getRequestDispatcher() 。

IMO response.sendRedirect() will send a redirect status code to browser which will eventually make a NEW request which is the reason that you are getting GET requests. This is also the reason behind not getting POST data (as its a new and different request altogether). Use request.getRequestDispatcher() instead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文