Получить в контроллере значения элементов из формы
Есть форма в html. Как в контроллере получить действия на этой форме? Например если выбрали несколько чекбоксов или нажали кнопку. Как понять и отловить это в контроллере? Эта форма никак не связана с каким-то объектом, а предназначена для выбора нескольких чекбоксов и нажатия на кнопку "Старт", после чего в контроллере будет запущен метод.
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>title</title>
</head>
<body>
<div class="container">
<div class="col-4">
<div class="form_wrapper">
<form>
<input type="checkbox" id="chk01" name="chk01"/>
<label for="chk01">01</label>
<input type="checkbox" id="chk02" name="chk02"/>
<label for="chk02">02</label>
<input type="checkbox" id="chk03" name="chk03"/>
<label for="chk03">03</label>
<input type="checkbox" id="chk04" name="chk04"/>
<label for="chk04">04</label>
<input type="checkbox" id="chk05" name="chk05"/>
<label for="chk05">05</label>
<input type="checkbox" id="chk06" name="chk06"/>
<label for="chk06">06</label>
<input type="checkbox" id="chk07" name="chk07"/>
<label for="chk07">07</label>
<br/>
<input type="submit" value="Старт">
</form>
</div>
</div>
</div>
</body>
</html>
Контроллер
@Controller
public class MainController {
@Autowired
public MainController() {
}
@GetMapping("/")
public String main() {
return "index";
}
@PostMapping("/start")
public void test() {
System.out.println("5555555555");
}
}
Ответы (1 шт):
Допустим, форма хранится в файле select.html и открывается по /select, тогда я предлагаю такой контроллер (указаны не все чекбоксы):
@Controller
public class Select {
@GetMapping("/select")
public String select(
@RequestParam(required = false) boolean chk01,
@RequestParam(required = false) boolean chk02,
@RequestParam(required = false) boolean chk03
) {
if (chk01) System.out.println("chk01");
if (chk02) System.out.println("chk02");
if (chk03) System.out.println("chk03");
return "select";
}
}
Т.к в форме нет атрибута action браузер отправит запрос на тот же адрес по которому получ эту форму, а из-за отсутсвия атрибута method, будет использоваться дефолтный GET. В итоге, запрос будет иметь вид типа
GET hhttp://localhost:8080/select?chk01=on&chk03=on если выбраны 1 и 3 варианты.
Параметры после ? получаем с помощью аннотации@RequestParam; значение будет преобразовываться в true при выборе (передаётся on); имя параметра метода соответсвует атрибуту name.
Для нормальной обработки запроса GET на получения страницы с формой параметры отмечены как необязательные.