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())代码>