Java Spring MVC中的重定向发生无限循环

Java Spring MVC中的重定向发生无限循环,java,spring,spring-mvc,Java,Spring,Spring Mvc,我使用的是Spring 3.1.1和tomcat5.5.31 cardproducer.jsp文件中的invoke方法: window.location.href = "${pageContext.request.contextPath}/deleteCardProducer/" + id + ".html"; 控制员: @RequestMapping("/deleteCardProducer/{id}") public String delete(@PathV

我使用的是
Spring 3.1.1
tomcat5.5.31

cardproducer.jsp文件中的invoke方法:

window.location.href = "${pageContext.request.contextPath}/deleteCardProducer/"
                + id + ".html";
控制员:

@RequestMapping("/deleteCardProducer/{id}")
public String delete(@PathVariable("id") String id, Model model,RedirectAttributes att,HttpServletRequest request)
        throws Exception {
    if(service.deleteCardProducer(id)){
        return getCardProducerList(model,request);
    }else{
        request.setAttribute("errorMessage", resource.getMessage(
                "error.relevantCardProducer", new Object[] {},
                LocaleContextHolder.getLocale()));
        return "redirect:cardProducer.html";
    }
}
删除后,应列出所有卡片制作人:

@RequestMapping("/cardProducer")
public String getCardProducerList(Model model,HttpServletRequest request) {
    model.addAttribute("cardProducerList", service.getAllProducer());
    try {
        if (request.getParameter("errorMessage")==null) {
            return "cardproducer/cardProducer";
        }

            String errorMessage=new String(request.getParameter("errorMessage").getBytes("ISO-8859-1"), "GBK");
            model.addAttribute("errorMessage",errorMessage);
            log.info("request.getParameter(errorMessage):"+errorMessage);
        } catch (UnsupportedEncodingException e) {
            log.error("errors"+e.getMessage());
        }
        return "cardproducer/cardProducer";
日志信息显示请求URL为cardpro,如下所示:

 2014-12-19 16:21:09,997 DEBUG 

web.persistence.HBOPSWebDaoImpl.deleteCardProducer(HBOPSWebDaoImpl.java:138) http-8080-2 - queryCardProducer relevant  sql String is ~select count(1) from ops_writecardlog t where t.supplier='cardProducer'
 2014-12-19 16:21:10,012 DEBUG web.persistence.HBOPSWebDaoImpl.deleteCardProducer(HBOPSWebDaoImpl.java:136) http-8080-2 - deleteCardProducer sql String is ~delete ops_cardproducer where id='cardProducer'
 2014-12-19 16:21:10,013 DEBUG web.persistence.HBOPSWebDaoImpl.deleteCardProducer(HBOPSWebDaoImpl.java:138) http-8080-2 - queryCardProducer relevant  sql String is ~select count(1) from ops_writecardlog t where t.supplier='cardProducer'
 2014-12-19 16:21:10,027 DEBUG web.persistence.HBOPSWebDaoImpl.deleteCardProducer(HBOPSWebDaoImpl.java:136) http-8080-2 - deleteCardProducer sql String is ~delete ops_cardproducer where id='cardProducer'
 2014-12-19 16:21:10,029 DEBUG web.persistence.HBOPSWebDaoImpl.deleteCardProducer(HBOPSWebDaoImpl.java:138) http-8080-2 - queryCardProducer relevant  sql String is ~select count(1) from ops_writecardlog t where t.supplier='cardProducer'
 2014-12-19 16:21:10,043 DEBUG web.persistence.HBOPSWebDaoImpl.deleteCardProducer(HBOPSWebDaoImpl.java:136) http-8080-2 - deleteCardProducer sql String is ~delete ops_cardproducer where id='cardProducer'
 2014-12-19 16:21:10,044 DEBUG web.persistence.HBOPSWebDaoImpl.deleteCardProducer(HBOPSWebDaoImpl.java:138) http-8080-2 - queryCardProducer relevant  sql String is ~select count(1) from ops_writecardlog t where t.supplier='cardProducer'
 2014-12-19 16:21:10,057 DEBUG web.persistence.HBOPSWebDaoImpl.deleteCardProducer(HBOPSWebDaoImpl.java:136) http-8080-2 - deleteCardProducer sql String is ~delete ops_cardproducer where id='cardProducer'
 2014-12-19 16:21:10,059 DEBUG web.persistence.HBOPSWebDaoImpl.deleteCardProducer(HBOPSWebDaoImpl.java:138) http-8080-2 - queryCardProducer relevant  sql String is ~select count(1) from ops_writecardlog t where t.supplier='cardProducer'
正确的做法是删除并显示所有内容。它会导致无限循环

您可以尝试-modelAndView.setViewName(“重定向:/cardProducer”)

//在我的项目中,我使用了分幅作为模板


我认为你的重定向不会回到root。当您通过
“redirect:cardProducer.html”
重定向时,我猜它只是将其附加到您当前的URI,生成类似
“/deleteCardProducer/cardProducer.html”
的内容。它正在重定向到此位置,该位置由删除控制器拾取,并一次又一次地重定向

相反,您需要重定向回root。以斜杠开头的内容,如
“redirect:/cardProducer.html”


您应该能够在浏览器中打开控制台并查看位置标头值(重定向URI)。

您可以发布service.deleteCardProducer(id))代码吗?@RRR服务代码:
@Override public boolean deleteCardProducer(String id){return dao.deleteCardProducer(id);}
@mikeTheLiar和dao代码:
@覆盖公共布尔deleteCardProducer(String id){String sql=“delete-ops\u-cardproducer,其中id=”+id+“””;log.debug(“deleteCardProducer-sql String是~“+sql”);String sql2=“从ops\u-writecardlog t中选择计数(1),其中t.supplier=“+id+”;log.debug(“queryCardProducer相关的sql字符串是~”+sql2);if(jdbcTemplate.queryForInt(sql2)!=0){return false;}else{return jdbcTemplate.update(sql)>0;}}
谢谢。问题解决了!并更新控制器文件中的sth,
att.addAttribute(“errorMessage”,resource.getMessage(“error.relevantCardProducer”),新对象[]{},LocaleContextHolder.getLocale())