Как передать переменную из HTML выбрать как PathVariable? - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть такая форма:

<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";
}

Он пишет "не найдено" PS: что теперь используется @PathVariable@RequestParam, как я использую его в теле, а также.Как передать параметры в качестве переменной контроллеру, чтобы получить список / сотрудников и список / контракты при выводе данных таблицы с помощью findAll?

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Просто используйте аннотацию @ RequestParam .

Как описано в документации:

Вы можете использовать аннотацию @RequestParam для привязки параметров запроса сервлета (то есть параметров запроса или данных формы) к аргументу метода в контроллере. 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.

1 голос
/ 24 апреля 2019

@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 возвращает некоторые данные, и как вы затем отправляете эти данные в представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...