Получить в контроллере значения элементов из формы

Рейтинг: -2Ответов: 1Опубликовано: 28.03.2023

Есть форма в 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");
    }

}

Ответы

▲ 0Принят

Допустим, форма хранится в файле 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 на получения страницы с формой параметры отмечены как необязательные.