Java 使用SpringMVC3将一个控制器重定向到另一个控制器
下面是我的控制器Java 使用SpringMVC3将一个控制器重定向到另一个控制器,java,spring-mvc,Java,Spring Mvc,下面是我的控制器 @RequestMapping(method = RequestMethod.GET) @ResponseBody public String ABC(Registratio registration, ModelMap modelMap, HttpServletRequest request,HttpServletResponse response){ if(somecondition=="false"){ retur
@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类型,它将始终作为字符串返回,但我希望在else contion中,它应该重定向到XYZ控制器,并从中返回一个jsp页面,我可以显示该页面。
我尝试使用return“forward:checkPage”同时返回“重定向:检查页面”强>
但是不起作用。
任何帮助
谢谢。指向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
}
使用
我认为您必须删除@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");
上面的代码对我有用。我正在从当前控制器重定向到AdminController中的索引。请尝试此选项以获得您的答案,它将肯定是ya@Mohsin Shaikh,但ABC控制器没有重定向到XYZ控制器。。如果是,那么只有我可以检查。但是当它转到if条件“response.getWriter().write(“notok”);”时,这是为了什么?“response.getWriter().write(“notok”);”意味着自己呈现响应,这与method上的@ResponseBody具有相同的效果,但我从jquery调用$.get(“/AAA Web/abc”,jquery.param({}),function(data){alert(data);});但在ABC控制器的数据响应中,当它进入if条件时,它会向我显示“[object XMLDocument]”。。建议的其余部分工作正常。如果somecondition==“false”尝试调用data.toString(),则回调函数中的data参数将获得值“notok”。您是否签出了此选项?它可能对您有用。
$.get("/AAA-Web/abc",jQuery.param({})
,function(data){
alert(data);
}, "text");
return new ModelAndView("redirect:/admin/index");