我正在尝试在我的一个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
}
答案 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,它将返回购物车视图。 希望这会奏效。