我有一個Spring Boot @Controller,在Ajax呼叫后重定向一個頁面。代碼沒有顯示錯誤,但新頁面沒有出現。下面我分享了控制器的代碼和js函式的部分內容。有沒有人知道發生了什么?
控制器:
@RequestMapping(value = "/openNewPage"/span>, method = RequestMethod. GET)
public ModelAndView openNewPage。 title function_">openNewPage(@RequestParam String id, 模型model) {
ModelAndView mav = new ModelAndView() 。
mav.setViewName("/newPage") 。
return mav。
}
JS:
function open() {
var table = $('#dataList').DataTable() 。
$('#dataList tbody')。 on('click', 'tr', function() {
ligneSel = table.row(this).data()。
var id = ligneSel[0] 。
$.ajax({
url : './openNewPage'。
type: 'get'。
dataType : 'html'。
資料: {
id: id
},
success : function(data) {
if (data != null) {
$("body").html(資料)。
}
}
});
});
}
uj5u.com熱心網友回復:
我有一個定義選單的布局視圖,它通過向Spring控制器發出請求加載另一個頁面。例如:
< a href="#"/span> style="color: white" th:href="@{/photo}">上傳照片</a>
當我點擊Upload Photos時,它呼叫了/photo控制器:
@GetMapping("/photo"/span>)
public String photo() {
return "upload"。
這將回傳Spring BOOT應用中的上傳視圖。使用Thymeleaf模板,你可以簡單地參考控制器中模板下的HTML檔案名,如本例所示。你的問題看起來像是在使用AJAX,而不是使用選單項來參考控制器。
請看這個例子的完整教程:
https://spring.io/guides/gs/serving-web-content/
uj5u.com熱心網友回復:
簡單地命名視圖將不會重定向。當你創建ModelAndView時,試著添加redirect:前綴:
@RequestMapping(value = "/openNewPage"/span>, method = RequestMethod. GET)
public ModelAndView openNewPage。 title function_">openNewPage(@RequestParam String id, 模型model) {
ModelAndView mav = new ModelAndView("redirect:/newPage") 。
return mav。
}
另外,在你的JS中,你正在進行一個獲取請求,并獲得一個ModelAndView物件。
這不會將頁面重定向到ModelAndView上。
AJAX通常用于與RESTful服務進行互動,您可以進行GET請求并以異步方式在頁面上顯示資料,而無需離開頁面。
Spring在MVC(Model-View-Controller)框架中擁有ModelAndView類,它遵循MVC模式。 模型和視圖在服務器端(Java)得到解決,然后提供給客戶端,而不是在客戶端(Web瀏覽器、JS)獲取資料。
如果你想在客戶端重定向(從瀏覽器,JS),那么請在你的javascript中添加以下內容:
window.location.href = '/newPage';
你需要在你的控制器中定義/newPage端點,這樣才能發揮作用。
試一下:
@Controller
@RequestMapping("/"/span>)
public class RedirectController {
@GetMapping("/redirectWithRedirectPrefix"/span>)
public ModelAndView redirectWithUsingRedirectPrefix(ModelMap model)
{
model.addAttribute(" attribute", "redirectWithRedirectPrefix")。
return new ModelAndView("redirect:/redirectedUrl"/span>, model)。
}
uj5u.com熱心網友回復:
我的問題是對spring boot控制器的ajax呼叫并沒有重定向一個新的視圖。答案是,我們需要呼叫控制器兩次。
這篇文章將更好地解釋這個解決方案。Ajax呼叫spring boot控制器來重定向一個視圖。
感謝所有幫助我解決這個問題的人。
下面的例子顯示了解決方案:
1.
1) 第一個控制器: 2) 第二個控制器: 3) javaScript:
標籤:@RequestMapping(value = "/openNewPage"/span>, method = RequestMethod. GET)
public ModelAndView openNewPage。 title function_">openNewPageController1(@RequestParam String id, 模型model) {
ModelAndView mav = new ModelAndView("/newPage">) 。
return mav。
}
@RequestMapping(value = "/openNewPage"/span>, method = RequestMethod. GET)
public ModelAndView openNewPage。 title function_">openNewPageController2(@RequestParam String id, 模型model) {
ModelAndView mav = new ModelAndView("/newPage">) 。
return mav。
}
function open() {
var table = $('#dataList').DataTable() 。
$('#dataList tbody')。 on('click', 'tr', function() {
ligneSel = table.row(this).data()。
var id = ligneSel[0] 。
$.ajax({
url : './openNewPage'。
type: 'get'。
dataType : 'html'。
資料: {
id: id
},
success : function(data) {
window.location.href = "/openNewPage?id="/span> id。
}
});
});
}

