如何将html select中的变量作为PathVariable传递?

时间:2019-04-24 08:48:41

标签: java spring spring-mvc jsp jstl

我有这样的表格:

<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列出表数据时获得列表/员工和列表/合同?

2 个答案:

答案 0 :(得分: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 :(得分: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方法。