Hybris中页面重定向的正确方式是什么?
在Hybris中选对页面跳转方式:
<c:url> vs 后端redirect: 咱做Hybris开发的时候经常会纠结这两种跳转方式,其实它们压根不是互斥的,而是对应不同的业务场景——没有绝对的“正确”,只有适合的选择:
一、前端用<c:url>生成跳转链接
这是最常用的前端跳转方式,本质就是在JSP里生成一个标准的HTTP链接,用户点击后直接发起GET请求跳转到目标页面。
- 什么时候用?
- 做导航栏、页面按钮这类静态跳转入口的时候,不需要后端额外处理逻辑
- 直接从当前页面跳转到另一个页面,没有前置业务操作的场景
- 小提醒:
- 这是客户端侧的跳转,浏览器地址栏会直接更新成目标URL
- 得保证
/path是Hybris里配置好的有效路径(比如对应某个控制器的@RequestMapping,或者静态资源路径)
举个实际代码例子:
<a href="<c:url value="/product/${product.code}" />">查看${product.name}详情</a>
这就是生成一个指向特定商品详情页的链接,用户一点就过去,简单直接。
二、后端控制器结合redirect:重定向
这种是服务端主导的跳转,在Spring MVC控制器方法里返回"redirect:/targetPath",触发浏览器的302重定向响应。
- 什么时候用?
- 执行完后端业务逻辑后必须跳转的场景:比如表单提交成功后、订单创建完成后,总不能停在提交页面吧?
- 要避免用户刷新页面重复提交数据:比如提交订单后用
redirect跳转,刷新只会刷新目标页面,不会重复提交订单 - 需要从一个控制器方法跳转到另一个控制器,或者统一控制跳转流程的时候
- 小技巧:
- 如果要给目标页面传临时数据,别用普通的
Model,得用RedirectAttributes.addFlashAttribute(),因为重定向是全新的请求,普通Model里的数据带不过去
- 如果要给目标页面传临时数据,别用普通的
举个控制器代码例子:
@RequestMapping(value = "/checkout/submit", method = RequestMethod.POST) public String submitCheckout(CheckoutForm form, RedirectAttributes redirectAttributes) { // 先处理结账逻辑:生成订单、扣库存等等 Order order = checkoutService.completeCheckout(form); // 传递成功提示给确认页 redirectAttributes.addFlashAttribute("successMessage", "订单" + order.getCode() + "已创建!"); // 重定向到订单确认页 return "redirect:/checkout/confirmation"; }
这里处理完结账逻辑后,通过redirect跳转到确认页,完美避免重复提交问题。
最后给你划重点
- 静态跳转、页面入口链接:用
<c:url>就够了,简单高效 - 有后端业务逻辑前置、需要防重复提交、控制跳转流程:必须用后端
redirect:的方式
说白了就是看你是需要“前端直接跳”还是“后端处理完再跳”,选对场景就不会错~
内容的提问来源于stack exchange,提问作者Rachit
相关产品推荐
相关产品推荐

