我正在撰写单页Spring MVC
应用程序。
要求:
示例用例:
如果我输入一个网址" my.site.com /",我只想加载我的网站骨架,而没有User
的数据。 (User
是我模型中的一个对象。)
如果我输入一个网址" my.site.com/users/John" ;,我想要" John"显示(页面可以重新加载)。
textbox
和点击按钮Go!
中,我只希望显示用户数据的页面部分刷新,不是重新加载整个页面 设计问题:
我理解,对于 1)和 2),我需要返回一个新的ModelAndView
对象,并且 3)我可以使用AJAX
。这可能意味着我需要三种控制器方法。
我不知道如何避免MVC和AJAX控制器方法之间的冲突的URL ,以及如何从Javascript实际调用我的AJAX
控制器方法,以及不是ModelAndView
控制器方法。
代码示例:
我需要的是这样的,除了这会导致冲突的网址。
/*
* Default view.
*/
@RequestMapping(value = "/users")
public ModelAndView displayDefault() {
return new ModelAndView("userdisplay_default.jsp");
}
/*
* View for a specific user.
*/
@RequestMapping(value = "/users/{username}")
public ModelAndView displaySpecific(@PathVariable(value = "username") String username) {
User user = new User(username);
return new ModelAndView("userdisplay_specific.jsp", "Specific User", user);
}
/*
* AJAX controller method.
*/
@RequestMapping(value = "/users/{username}", produces = "application/json", method = RequestMethod.GET)
public @ResponseBody User getTime(@PathVariable(value = "username") String username) {
return new User(username);
}
在Javascript中,我会像这样获取POJO
:
// obtain user
var user = $('#user_input').val(); // this is a text input
$.getJSON("/users/"+user, function() {
//...
});
注意:我试图实现这一点的方式可能是错误的//不够//不是最佳的,所以请随意提出一些其他的方法来解决这个问题。
请您给我一个解释以及一个代码示例,说明我需要完成的工作是什么?
答案 0 :(得分:1)
您可以为控制器制作不同的方法。
例如:
@RequestMapping(value = "/users")
和@RequestMapping(value = "/users/{username}")
- 有GET方法。但对于AJAX make控制器使用POST:
@RequestMapping(value = "/users/{username}", produces = "application/json", method = RequestMethod.POST)
JS会像这样:
// Send the request
$.post("/users/"+user, data, function(response) {
// Do something with the request
});
另一个建议(如果你的情况可能) - 重新命名你的网址。例如。在网址中添加单词api
。