ajax调用后重定向到另一个控制器

时间:2014-04-11 15:57:31

标签: java spring spring-mvc

我想在成功调用ajax之后重定向到另一个控制器我也想发送一些我在响应中得到的数据

用户控制器

@RequestMapping(method = RequestMethod.POST, value = "/user/preferences")
public @ResponseBody Map<String, List<String>> userPreferences(HttpServletRequest request) {
    Map<String , List<String>> finalPlaces = new LinkedHashMap<String, List<String>>();
    finalPlaces.put(entry.getKey(), new ArrayList<String>(topPlaces));
    return finalPlaces; 
}

Ajax Call

$(".savebutton").click(function(){
     $.ajax({       
        url: "<c:url value='/user/preferences' />",
        type: 'POST',            
        data:{  
        preferences : preferences
        },
        success: function(response) 
        {
        }, 
        error: function(xhr, ajaxOptions, thrownError) {
          alert('Error');
         }
   });
});

当上述ajax调用成功返回时,我想调用另一个控制器的方法

位置控制器

@RequestMapping(method = RequestMethod.GET, value = "/places")
public ModelAndView showRecommnededPlaces(Map<String, List<String>> recommndedPlaces) {
    System.out.print(recommndedPlaces);     
    ModelAndView model = new ModelAndView("places");
    return model; 
}

是否可以直接从用户控制器调用places控制器操作?

由于

2 个答案:

答案 0 :(得分:0)

是的,您可以在用户控制器中return "redirect:/places";,例如:

@RequestMapping(method = RequestMethod.POST, value = "/user/preferences")
public @ResponseBody String userPreferences(HttpServletRequest request) {

    Map< String, Integer> userPreferences = new HashMap< String, Integer>();
    . 
    . 
    .
    return "redirect:/places"; 
}

答案 1 :(得分:0)

如果您可以将依赖从一个控制器放到下一个控制器,您实际上可以这样做:

public class UserController {
    @Autowired PreferencesController prefController;
    @RequestMapping(method = RequestMethod.POST, value = "/user/preferences")
    public @ResponseBody Map<String, List<String>> userPreferences(HttpServletRequest request)         {
        Map<String , List<String>> finalPlaces = new LinkedHashMap<String, List<String>>();
        finalPlaces.put(entry.getKey(), new ArrayList<String>(topPlaces));
        return prefController. showRecommendedPlaces(finalPlaces); 
    }
} 

不是说这很好 - 因为您必须适当地匹配被叫控制器的响应类型,但仍然是一种方法