2013-08-07 3 views
7

ниже моего контроллерперенаправлять один к другому контроллеру с помощью Spring MVC 3

@RequestMapping(method = RequestMethod.GET) 
@ResponseBody 
public String ABC(Registratio registration, ModelMap modelMap, 
     HttpServletRequest request,HttpServletResponse response){ 
     if(somecondition=="false"){ 
      return "notok"; // here iam returning only the string 
      } 
      else{ 
       // here i want to redirect to another controller shown below 
      } 
} 

@RequestMapping(value="/checkPage",method = RequestMethod.GET,) 
public String XYZ(ModelMap modelMap, 
     HttpServletRequest request,HttpServletResponse response){ 
     return "check"; // this will return check.jsp page 
} 

с контроллера ABC является @ResponceBody типа, он всегда будет возвращаться в виде строки, но я хочу, чтобы в остальном contion это должно быть перенаправляется на контроллер XYZ и с которого он возвращает страницу jsp, которую я могу показать. Я попытался использовать return "forward: checkPage"; также с return "redirect: checkPage"; но не работает. любая помощь.

Спасибо.

+0

вы проверили это [ответ] (http://stackoverflow.com/a/6424409/787375), возможно, это вам полезно. – jelies

ответ

10

Я думаю, вы должны удалить @ResponseBody, если вы хотите либо отреагировать ответ самостоятельно, либо перенаправить в один метод контроллера на основе некоторых условий, попробуйте следующее:

@RequestMapping(method = RequestMethod.GET) 
//remove @ResponseBody 
public String ABC(Registratio registration, ModelMap modelMap, 
    HttpServletRequest request,HttpServletResponse response){ 
    if(somecondition=="false"){ 
     // here i am returning only the string 
     // in this case, render response yourself and just return null 
     response.getWriter().write("notok"); 
     return null; 
    }else{ 
     // redirect 
     return "redirect:checkPage"; 
    } 
} 

--edit--

, если вы хотите получить доступ к контроллеру через AJAX, то лучше включить параметр типа данных на запросе, чтобы указать, что вы просто ожидаете текст ответа:

$.get("/AAA-Web/abc",jQuery.param({}) 
    ,function(data){ 
     alert(data); 
    }, "text"); 
+0

, но когда он переходит к условию «response.getWriter(). Write (« notok »); для чего это. ? – ASUR

+0

"response.getWriter(). Write (" notok ");" означает, что вы ответите сами, что имеет такой же эффект с @ResponseBody по методу – Septem

+0

, но я звоню из jquery как $ .get ("/ AAA-Web/abc", jQuery.param ({}), function (data) {alert (данные); }); но в ответе данных от контроллера ABC его покажут «[объект XMLDocument]». Когда дело доходит до условия Condition. остальное ваше предложение работает нормально. – ASUR

-1

edirected к контроллеру XYZ и из которого он возвращает страницу JSP вместо того, чтобы использовать следующий код I/E

@RequestMapping(value="/checkPage",method = RequestMethod.GET,) 
    public String XYZ(ModelMap modelMap, 
    HttpServletRequest request,HttpServletResponse response){ 
    return "check"; // this will return check.jsp page 
    } 

использование

@RequestMapping(value ="/checkPage",method = RequestMethod.GET) 
public ModelAndView XYZ(HttpServletRequest req) 
{ 

    ModelAndView m=new ModelAndView(); 

    m.setViewName("check"); 
    return m; 
} 
+1

Попробуйте это для своего ответа, это обязательно будет –

+0

ya @Mohsin Shaikh, но контроллер ABC не перенаправляется на контроллер XYZ .. если он тогда только я могу проверить. – ASUR

0
return new ModelAndView("redirect:/admin/index"); 

Этот код работает для меня. Я перенаправлялся от текущего контроллера к индексу в AdminController.

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