使用请求参数将javascript变量传递给spring MVC控制器

Posted

技术标签:

【中文标题】使用请求参数将javascript变量传递给spring MVC控制器【英文标题】:Passing javascript variable to spring MVC controller with request param 【发布时间】:2022-01-11 06:47:45 【问题描述】:

是否可以将 javascript 变量发送到控制器端点,然后让控制器返回一个新视图? 我试过使用 requestbody 和 ajax 来做,它可以正确传递变量,但无法加载新视图。

也许有一种方法可以用百里香来做到这一点?

【问题讨论】:

@RequestParam 可用于传递值。也许您可以分享更多信息和一些代码,以便更好地了解您面临的问题。 我有一个控制器方法,我希望从 javascript 函数中传递一个变量。 ``` @GetMapping("/project/task") public String test(@RequestParam long id) // 从任务 id 创建模型,并转到新的视图页面 return "taskpage"; ``` 当点击一个任务(来自谷歌图表 api 的甘特图)时,javascript 函数会检索变量(任务 ID)。 ``` $.ajax( contentType: "application/json", type: "GET", data: taskId url: "/project/task/"+id, ); ``` 没有requestbody(它不会加载新页面)是行不通的 从 Javascript 你在 url 中传递 id。所以你可以使用@PathVariable 在控制器中获取它。 @GetMapping(“project/task/id”) public String test(@PathVariable Long id) @Cozimetzer 这几乎可以工作,除了它仍然不会加载新的 html 页面,而是保持在同一页面上.. 嗯.. 【参考方案1】:

如果您使用的是 Thymeleaf,那么只需通过文件名引用您想要返回给用户的模板。

@Controller
public class YourController 

    @GetMapping("/someUrl")
    public String getTemplate(@RequestParam String templateName)
        return templateName;
    

这将是您需要的最低限度,假设您的模板位于正确的文件夹中 - 默认情况下位于 resources/static。如果前端向后端发送GET (/someUrl?templateName=xyz),它将从您的模板中返回xyz.html。如果没有找到参数中请求的模板,则返回 404。

编辑:通读 cmets,我意识到 @RequestParam@PathVariable 之间可能存在混淆。如果你想使用路径变量来定义模板名称,以便前端可以调用GET (/someUrl/xyz),那么你可以这样做

@Controller
public class YourController 

    @GetMapping("/someUrl/templateName")
    public String getTemplate(@PathVariable String templateName)
        return templateName;
    

以下两者的资源:

https://www.baeldung.com/spring-request-param

https://www.baeldung.com/spring-pathvariable

【讨论】:

以上是关于使用请求参数将javascript变量传递给spring MVC控制器的主要内容,如果未能解决你的问题,请参考以下文章

使用 javascript/jquery,将表单变量传递给 iframe src 参数

使用 Kendo MVC 上传控件将 Javascript/html 变量作为参数传递

如何将javascript变量传递给django模板标签

在 laravel 刀片路由中使用 JavaScript 变量

使用 jquery 将模板变量传递给 django url

spring 请求参数和路径变量