[英]Spring MVC JSP Jquery call controller method on button click post redirect error
[英]Call controller method from JSP button in Spring MVC
我想在Spring MVC中使用JSP頁面上的按鈕來調用控制器方法,但我希望它保留在當前頁面上,不要重新加載它或任何東西,只需調用一個方法。 我發現很難。 我的按鈕在cars.jsp
頁面上。 為了留在這個頁面,我必須做這樣的事情:
@RequestMapping(value="/start")
public String startCheckingStatus(Model model){
System.out.println("start");
model.addAttribute("cars", this.carService.getCars());
return "car\\cars";
}
按鈕:
<a href="<spring:url value="/cars/start"/>">Start</a>
但這不是一個好的解決方案,因為我的頁面實際上是重新加載的。 我可以在沒有任何刷新,重定向或任何其他情況下調用controller
方法嗎? 當我刪除返回類型時:
@RequestMapping(value="/start")
public void startCheckingStatus(Model model){
System.out.println("start");
}
我得到了404。
在按鈕上添加onclick事件,並從您的javascript調用以下代碼:
$("#yourButtonId").click(function(){
$.ajax({
url : 'start',
method : 'GET',
async : false,
complete : function(data) {
console.log(data.responseText);
}
});
});
如果要等待調用的結果,請保持async : false
否則將其刪除。
如其他地方所述,您可以通過實現基於Ajax的解決方案來實現:
https://en.wikipedia.org/wiki/Ajax_(programming)
使用Ajax,Web應用程序可以異步(在后台)向服務器發送數據和從服務器檢索, 而不會干擾現有頁面的顯示和行為。 通過將數據交換層與表示層分離, Ajax允許Web頁面和擴展Web應用程序動態更改內容,而無需重新加載整個頁面 。
要實現此目的,您需要更改應用程序的客戶端和服務器端部分。 使用Spring MVC時,只需將@ResponseBody
注釋添加到控制器方法中即可:
可以放在一個方法上,並指示返回類型應直接寫入HTTP響應主體(而不是放在模型中,或解釋為視圖名稱)。
因此,例如,要在Ajax響應中返回一個簡單的String,我們可以執行以下操作(沒有@ResponseBody,框架會嘗試找到一個名為“some status”的視圖,這顯然不是我們想要的):
@RequestMapping(value="/start")
@ResponseBody
public String startCheckingStatus(Model model){
return "some status";
}
對於客戶端部分,您需要添加一些javascript,它將使用XMLHttpRequest對象從控制器中檢索數據。
雖然有各種框架可以簡化這個(例如JQuery),但下面有一些使用vanilla javascript的例子,可能值得先看看其中的一些,看看實際發生了什么:
http://www.w3schools.com/ajax/ajax_examples.asp
如果我們采用這個具體的例子:
http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_callback
並[1]將<button/>
和<script/>
元素復制到JSP,[2]將URL更改為指向控制器,[3]創建元素<div id="demo"></div>
然后,在您的JSP中,單擊頁面中的按鈕,應更新此<div/>
以顯示控制器返回的String。
如上所述,這是一個動作的大量代碼,因此您可以使用一些JS框架來抽象出很多動作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.