2014-12-19 2 views
0

Я использую Spring 3.1.1 и tomcat 5.5.31редирект в Spring MVC происходит бесконечный цикл

Метод Invoke в файле cardproducer.jsp:

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' 

Правильные вещи, это удалить cardProducer затем показать их все. Это вызывает бесконечный цикл.

+1

Не могли бы вы отправить service.deleteCardProducer (id)) код? – Rohan

+0

@RRR Сервисный код: '@Override \t общественного логический deleteCardProducer (String ID) { \t \t возвращение dao.deleteCardProducer (ID); \t} ' – jptiancai

+0

@mikeTheLiar и код дао:' @Override \t общественного логический deleteCardProducer (String ID) { \t \t Строка SQL = "удалить ops_cardproducer где ID = ' "+ идентификатор +"'"; \t \t \t log.debug ("deleteCardProducer sql String is ~" + sql); \t \t String sql2 = "select count (1) from ops_writecardlog t где t.supplier = '" + id + "'"; \t \t log.debug ("queryCardProducer соответствует sql String ~ ~ + sql2); \t \t if (jdbcTemplate.queryForInt (sql2)! = 0) { \t \t \t return false; \t \t} else { \t \t \t return jdbcTemplate.обновление (SQL)> 0; \t \t} \t \t \t} ' – jptiancai

ответ

0

Я думаю, что ваш редирект не собирается обратно в корень. Когда вы перенаправляете через "redirect:cardProducer.html", я предполагаю, что он просто добавляет это к вашему текущему URI, производя что-то вроде "/deleteCardProducer/cardProducer.html". Он перенаправляется на это, который выбирается контроллером удаления, и перенаправляет снова и снова.

Вместо этого вам необходимо перенаправить обратно в корень. Что-то с начальным косой чертой, как "redirect:/cardProducer.html".

Вы должны иметь возможность открывать консоль в своем браузере и видеть, какие значения заголовка местоположения (URI перенаправления).

+0

Спасибо. Проблема решена! и обновить sth в файле контроллера 'att.addAttribute (ошибка errorMessage, resource.getMessage ( )" .relevantCardProducer ", новый объект [] {}, LocaleContextHolder.getLocale()));' – jptiancai

0

вы можете попробовать - modelAndView.setViewName ("redirect:/cardProducer");

// В моем проекте я использовал плитки для шаблонам

+0

Спасибо за помощь, но она не работает. – jptiancai

+0

Ох. :(но это работает для меня. –

+0

Не могли бы вы разместить весь код работ для вас? – jptiancai

Смежные вопросы