Servlet控制器 - 使用参数重定向

时间:2017-12-05 13:02:17

标签: java spring jsp servlets

我正在使用Spring MVC Web应用程序:Servlet + JSP + Hibernate。这是我CustomerController.java

的一部分
@RequestMapping(value="/CustomerList", method = RequestMethod.GET)
public ModelAndView customerList() {
    ModelAndView model = new ModelAndView();
    model.setViewName("Customer.List"); // for Tiles View
    model.addObject("listCustomer", DAO_Customer.getListCustomer());
    return model;
}

@RequestMapping(value="/Customer/{id}/Delete", method = RequestMethod.GET)
public String deleteCustomer(@PathVariable("id") int id, Model model) {
    boolean isSuccess = DAO_Customer.deleteCustomer(id);
    if (!isSuccess) {
        model.addAttribute("error", "Failed");
    }
    model.addAttribute("success", "Successed");

    return "redirect:/CustomerList";
}

以下是要显示的CustomerList.jsp文件中的代码:

...
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:if test="${not empty error}">
    <p>${error}</p>
</c:if>
<c:if test="${not empty success}">
    <p>${success}</p>
</c:if>
...

我想重定向到/CustomerList并添加参数error + success
问题是,当我运行时,它会返回/CustomerList?success=Successed,并且没有任何内容可以显示默认的客户列表
我经常搜索,但真的不知道怎么做我想要的。感谢大家的阅读和帮助。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用RedirectAttributes#addAttribute

@RequestMapping(value="/Customer/{id}/Delete", method = RequestMethod.GET)
public String deleteCustomer(@PathVariable("id") int id, RedirectAttributes redirectAttributes) {
  boolean isSuccess = DAO_Customer.deleteCustomer(id);
  if (!isSuccess) {
    redirectAttributes.addAttribute("error", "Failed");
  } else{ //also required
    redirectAttributes.addAttribute("success", "Successed");
  }
  return "redirect:/CustomerList";
}

在这种情况下,如果成功,网址将变为/CustomerList?success=Successed

您可以使用EL访问参数值,如下所示:

${param.success} or ${param.error}

您也可以使用RedirectAttributes#addFlashAttribute

redirectAttributes.addFlashAttribute("success", "Successed");

然后,您可以直接访问${success}${error}

答案 1 :(得分:0)

为时已晚,但是如果有人仍然对此感到疑惑-最简单的解决方案是使用重定向并向会话添加属性:

在Servlet中:

req.getSession().setAttribute("<your attribute>");

要重定向到的Servlet:

private void checkMessages(HttpServletRequest request) {
    SomeObject result = (SomeObject) request.getSession().getAttribute("<your attribute>");
    if (result != null) {
        request.setAttribute(result);
        request.getSession().removeAttribute("<your attribute>");
    }
}

像魅力一样工作!