Java 在SpringMVC中从JSP按钮调用控制器方法
我想在SpringMVC中使用JSP页面上的按钮调用一个控制器方法,但我希望它保持在当前页面上,不要重新加载它或任何东西,只需调用一个方法即可。我觉得很难。我的按钮在Java 在SpringMVC中从JSP按钮调用控制器方法,java,spring,jsp,spring-mvc,Java,Spring,Jsp,Spring Mvc,我想在SpringMVC中使用JSP页面上的按钮调用一个控制器方法,但我希望它保持在当前页面上,不要重新加载它或任何东西,只需调用一个方法即可。我觉得很难。我的按钮在cars.jsp页面上。为了留在这一页上,我必须做如下事情: @RequestMapping(value="/start") public String startCheckingStatus(Model model){ System.out.println("start"); model.addAttribute(
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>
我得到了404。在按钮上添加onclick事件,并从javascript调用以下代码:
$("#yourButtonId").click(function(){
$.ajax({
url : 'start',
method : 'GET',
async : false,
complete : function(data) {
console.log(data.responseText);
}
});
});
如果要等待调用结果,请保持
async:false
,否则将其删除。如其他地方所述,您可以通过实现基于Ajax的解决方案来实现这一点:
使用Ajax,web应用程序可以向服务器发送数据和从服务器检索数据
服务器异步(在后台)而不干扰
现有页面的显示和行为。通过解耦数据
交换层从表示层开始,Ajax允许web
页面,并通过扩展web应用程序来更改内容
动态加载,无需重新加载整个页面
要实现这一点,您需要对应用程序的客户端和服务器端部分进行更改。使用Spring MVC时,只需将@ResponseBody
注释添加到控制器方法中即可:
可以放在方法上,并指示返回类型应为
直接写入HTTP响应主体(而不是放在模型中,
或解释为视图名称)
因此,例如,要在Ajax响应中返回一个简单字符串,我们可以执行以下操作(如果没有@ResponseBody,框架将尝试找到一个名为“some status”的视图,这显然不是我们想要的):
对于客户端部分,需要添加一些javascript,这些javascript将使用XMLHttpRequest对象从控制器检索数据
虽然有各种各样的框架可以简化这一点(例如JQuery),但下面有一些使用vanilla javascript的示例,可能值得先看看其中的一些,以了解实际情况:
如果我们以这个具体的例子为例:
[1]将
和
元素复制到JSP,[2]更改URL以指向您的控制器,[3]在JSP中创建元素
,然后单击页面中的按钮,该
应更新以显示控制器返回的字符串
如前所述,这是一个操作的大量代码,因此您可以使用一些JS框架来提取大量代码。如果不想重新加载页面,您需要使用ajax框架,如jquery、dojo等来调用controller
$("#yourButtonId").click(function(){
$.ajax({
url : 'start',
method : 'GET',
async : false,
complete : function(data) {
console.log(data.responseText);
}
});
});
@RequestMapping(value="/start")
@ResponseBody
public String startCheckingStatus(Model model){
return "some status";
}