如何从html选择传递变量作为PathVariable?

问题描述 投票:0回答:2

我有一个这样的表格:

<form action="/list/${tableName}" method="post">
<p>
<select name="tableName">
<option value="employees">Employees</option>
<option value="contracts">Contracts</option>
</select>
</p>
<input type="submit" value="Submit" />
</form>

在控制器方面:

    @RequestMapping(value = "/list/{tableName}", method = { RequestMethod.POST, RequestMethod.GET })
    public String getTables(Model m, @PathVariable("tableName") String tableName) {
...
//findAll here
...
return "home";
}

它写了“未找到”P.S。:现在@PathVariable曾经是@RequestParam,因为我也在体内使用它。如何将选项作为变量传递给控制器​​,以便在使用findAll列出表数据时获取列表/员工和列表/合同?

java spring spring-mvc jsp jstl
2个回答
1
投票

@RequestParam用于查询参数(静态值),如:http://localhost:8080/calculation/pow?base=2&ext=4

@PathVariable用于动态值,如:http://localhost:8080/calculation/sqrt/8

@RequestMapping(value="/pow", method=RequestMethod.GET)
public int pow(@RequestParam(value="base") int base1, @RequestParam(value="ext") int ext1){
    int pow = (int) Math.pow(base1, ext1);
    return pow;
}

@RequestMapping("/sqrt/{num}")
public double sqrt(@PathVariable(value="num") int num1){
    double sqrtnum=Math.sqrt(num1);
    return sqrtnum;
}

这里是关于那个@PathVariable vs @RequestParam的更多信息的链接

解决您的问题您需要查看(如在调试模式下)您的方法findAll实际上是否返回了一些数据以及您如何将此数据发送到视图。


1
投票

只需使用@RequestParam注释即可。

如文档中所述:

您可以使用@RequestParam批注将Servlet请求参数(即查询参数或表单数据)绑定到控制器中的方法参数。 https://docs.spring.io/spring/docs/5.2.0.M1/spring-framework-reference/web.html#mvc-ann-requestparam

表格:

<form action="/list">
  <select name="tableName">
    <option value="employees">Employees</option>
    <option value="contracts">Contracts</option>
  </select>
  <input type="submit" value="Submit" />
</form>

控制器:

@RequestMapping(value = "/list", method = RequestMethod.GET)
public String getTables(Model m, @RequestParam("tableName") String tableName) {
  //findAll here
  return "home";
}

如果您的请求在服务器上没有任何副作用(是只读请求),那么好的方法是使用GET方法。

© www.soinside.com 2019 - 2024. All rights reserved.