2016-11-27 126 views
1

我正在寫單頁Spring MVC應用程序。重新加載頁面的部分按鈕點擊,刷新整個頁面上新的URL

要求

  1. 我希望它根據輸入的URL改變頁面的狀態。
  2. 我希望它通過點擊一個按鈕來改變頁面的狀態。

使用範例

  1. 如果我輸入一個URL 「my.site.com/」,我只想要我的網站骨架被加載,沒有數據的User。 (User是我的模型中的一個對象)。

  2. 如果我輸入一個URL「my.site.com/users/John」,我想顯示爲「約翰」的數據(頁面可以重新加載)。

  3. 如果我在textbox輸入字符串「約翰」,並按下按鈕Go!,我想只顯示用戶數據頁面的部分是刷新沒有重載整個頁面。

設計問題:

我明白,1)2)我需要返回一個新ModelAndView對象,併爲3)我可以使用AJAX。這可能意味着我需要三種控制器方法。

我不知道的是如何避免衝突的URL中的MVC和AJAX控制方法,以及如何實際然後打電話給我AJAX控制器的方法從Javascript,而不是ModelAndView控制器方法之間

代碼示例:

什麼,我需要的是這樣的,除了這一點,當然,導致衝突的網址

/* 
* Default view. 
*/ 
@RequestMapping(value = "/users") 
public ModelAndView displayDefault() { 

    return new ModelAndView("userdisplay_default.jsp"); 
} 

/* 
* View for a specific user. 
*/ 
@RequestMapping(value = "https://stackoverflow.com/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 = "https://stackoverflow.com/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("https://stackoverflow.com/users/"+user, function() { 
    //... 
}); 

注:我試圖做到這一點可能是錯// //不足不是最佳的方式,所以請隨時也可以免費提供一些關於如何做到這一點的其他方法。

請給我一個解釋以及代碼示例我應該如何完成?

回答

1

您可以爲您的控制器製作不同的方法。 例如: @RequestMapping(value = "/users")@RequestMapping(value = "https://stackoverflow.com/users/{username}") - 有GET方法。但是,對於AJAX使控制器POST:

@RequestMapping(value = "https://stackoverflow.com/users/{username}", produces = "application/json", method = RequestMethod.POST) 

和JS會水木清華這樣的:

// Send the request 
$.post("https://stackoverflow.com/users/"+user, data, function(response) { 
    // Do something with the request 
}); 

另一個建議(如果有可能你的情況) - 爲您的休息重新命名的網址。例如。將字api添加到網址中。