Повторно ввести постданные в запросе перенаправления перехватчика - PullRequest
1 голос
/ 04 августа 2011

Вот в чем дело,

Чтобы подражать тому, как grails выполняет несколько отправок для одной формы, я реализовал этот перехватчик, чтобы, когда он встречает URL-адрес, такой как:
/ what-url / $ {controllerName} / индекс, который он перенаправляет на / what-url / $ {controllerName} / $ {submitName}

У меня есть две проблемы: во-первых, он перенаправляется методом get, а во-вторых, я не сохраняю postData из исходной формы, которая была в jsp, у кого-нибудь есть идея, как установить это обратно в перенаправленном запросе?
Вот класс перехватчика: </p> <pre class="lang-java prettyprint-override"><code> 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; }

Ответ:

</p> <pre class="lang-java prettyprint-override"><code> 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; }

1 Ответ

2 голосов
/ 04 августа 2011

IMO response.sendRedirect() отправит код состояния перенаправления в браузер, который в конечном итоге сделает новый запрос, который является причиной того, что вы получаете запросы GET.Это также является причиной отсутствия данных POST (поскольку это новый и совсем другой запрос).Вместо этого используйте request.getRequestDispatcher().

...