使用请求参数将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 变量作为参数传递