2011-08-04 52 views
1

这里的东西,重新注入POSTDATA重定向请求

为了模仿Grails的方式做多次提交的一种形式,我实现了这个拦截器,这样,当它遇到一个URL,例如:
/什么-url/$ {controllerName}/index它重定向到/无论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; 

     } 

回答

2

IMO response.sendRedirect()将发送重定向状态代码到浏览器,这将最终使一个新的请求,这是你的理由获取GET请求。这也是没有获得POST数据的原因(因为它是一个新的和不同的请求)。改为使用request.getRequestDispatcher()

+0

谢谢,我不得不改变一点代码,但请求调度员是答案。 – Gepsens