Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在SpringMVC中从JSP按钮调用控制器方法_Java_Spring_Jsp_Spring Mvc - Fatal编程技术网

Java 在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(

我想在SpringMVC中使用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>

我得到了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"; 
}