下面是我的控制器
@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
}
由于Controller ABC 是@ResponceBody类型,它将始终以字符串形式返回,但我希望在其他情况下,它应该重定向到 XYZ 控制器,并从中它返回一个我可以显示的 jsp 页面。 我尝试使用返回“forward:checkPage”; 也使用 return“redirect:checkPage”; 但不起作用。 任何帮助。
感谢。
答案 0 :(得分: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";
}
}
- 编辑 -
如果你想通过ajax访问控制器,你最好在你的请求中包含datatype参数,以表明你只是期待文本响应:
$.get("/AAA-Web/abc",jQuery.param({})
,function(data){
alert(data);
}, "text");
答案 1 :(得分:0)
return new ModelAndView("redirect:/admin/index");
上面的代码对我有用。我正在从当前控制器重定向到AdminController中的索引。
答案 2 :(得分:-1)
被编辑到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;
}