如何在Spring MVC控制器中进行重定向?

时间:2015-08-05 16:09:09

标签: spring jsp spring-mvc

我正在尝试在我的一个Spring MVC控制器中使用PRG(Post-Redirect-Get)模式。控制器从HTML表单收集用户数据,进行一些处理,将数据存储在DB中,然后显示JSP页面。保存数据后,应该发生重定向,然后显示JSP页面。

我也尝试过重做#34;重定向:"在VIEW_NAME前面,但我得到404。

请指导。

CartPageController.java

@Controller
@RequestMapping("/cartPageController.do")
public class CartPageController {

    private static final Logger LOG = Logger.getLogger(CartPageController.class);
    private static final String VIEW_NAME = "cart";

    @Autowired
    protected MasterDao masterDao;

    @RequestMapping(method = {RequestMethod.GET, RequestMethod.POST})
    public ModelAndView processRequest(HttpServletRequest request, HttpServletResponse response) {
        LOG.debug("Into the CartPageController...");

        HttpSession session = request.getSession();
        ModelAndView mav = new ModelAndView();

        //create Cart object and store it in session
        Cart cart = null;
        if (session.getAttribute("cart") != null) {
            cart = (Cart) session.getAttribute("cart");
        } else {
            cart = createCart();
            session.setAttribute("cart", cart);
        }
        LOG.debug("cart = " + cart);

        //determine the cart operation
        String btnAddToCart = GenericUtils.nullToEmptyString(request.getParameter("btnAddToCart"));
        String removeProduct = GenericUtils.nullToEmptyString(request.getParameter("removeProduct"));
        String updateProduct = GenericUtils.nullToEmptyString(request.getParameter("updateProduct"));
        LOG.debug("btnAddToCart = " + btnAddToCart);
        LOG.debug("removeProduct = " + removeProduct);
        LOG.debug("updateProduct = " + updateProduct);
        if (btnAddToCart.length() > 0) {
            addToCart(request, cart);
        } else if (removeProduct.length() > 0) {
            removeProduct(request, cart);
        } else if (updateProduct.length() > 0) {
            updateCart(request, cart);
        }

        //TODO: Should use PRG pattern here
        //TRIED TO APPEND "redirect:" here but does not work, gives me 404 
        mav.setViewName(VIEW_NAME);
        return mav;
    }

    //some more code below here
}

4 个答案:

答案 0 :(得分:0)

你可以尝试

return new ModelAndView(new RedirectView("/page"));

答案 1 :(得分:0)

您不能只将“重定向:”添加到您的视图名称,这会产生redirect:cart然后显然404,您需要为重定向做的是指定重定向路径,例如:

redirect:/cart.htm

This应该详细解释一下。

答案 2 :(得分:0)

您应该重定向到网址而不是视图名称。作为Spring doc says

  

虽然   如果控制器本身创建,则使用RedirectView可以正常工作   RedirectView,没有避免控制器的事实   意识到重定向正在发生。这真的不是最理想的   将事情过于紧密。控制器不应该真正关心   关于如何处理响应。一般来说,它应该只运作   就注入的视图名称而言。

     

特殊重定向:前缀允许您完成此操作。如果一个视图   返回的名称具有前缀redirect:,.   UrlBasedViewResolver(以及所有子类)将此识别为   特殊指示需要重定向。 其余观点   名称将被视为重定向网址

答案 3 :(得分:0)

你可以这样做 重定向:cart.do并在控制器中有requestmapping,它将返回购物车视图。 希望这会奏效。