Две кнопки в форме SpringMVC

Я хочу иметь 2 кнопки в моей форме. одна кнопка добавляет ребенка, а другая кнопка должна создать семейство и перейти к другому шаблону. Мой контроллер не видит @RequestParam String action У меня что-то вроде этого:

    <!DOCTYPE html>
<html lang = "en" xmlns:th = "http://www.w3.org/1999/xhtml">
<head>
    <meta charset = "UTF-8">
    <title>Add Child</title>
</head>
<body>
<p>Add Child or Children</p></br>

<form method = "post" action = "/addChild">
First Name <input type = "text" name = "first_name"></br>
Second Name <input type = "text" name = "second_name"></br>
Sex <input type = "text" name = "sex"></br>
Pesel <input type = "text" name = "pesel"></br>
<input type = "submit" name= "Add child"value = "Add child"  ></input>
    <input type = "submit" name = "Create family" value = "Create family"></input>
</form>

</body>
</html>

И контроллер

@PostMapping(value = "addChild", params = "Add child")
public String addChild(@RequestParam("first_name") String firstName,
                       @RequestParam("second_name") String secondName,
                       @RequestParam ("sex") String sex,
                       @RequestParam ("pesel") String pesel,
                       @RequestParam String action){

    if (action.equals("Add child")) {
        ChildForm childForm = new ChildForm();
        childForm.setFirstName(firstName);
        childForm.setSecondName(secondName);
        childForm.setSex(sex);
        childForm.setPesel(pesel);
        childService.addChildToDB(childForm);

        return "AddChild";
    }else if (action.equals("Create family")){
        return "basic";
    }
    return "AddChild";
}

У вас нет элементов input с именем action.

GriffeyDog 05.07.2018 20:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Каждая кнопка submit выполняет действие, указанное в теге <form>. По сути, вы добавили 2 кнопки, которые будут выполнять одно и то же действие.

Вы можете создать другой элемент формы для второй кнопки отправки (она не разделяет параметры с первой):

<form method = "post" action = "/createFamily">
    <input type = "submit" name = "Create family" value = "Create family"></input>
</form>

ИЛИ ЖЕ

<input type = "button" onclick = "location.href='/createFamily';" value = "Create family" />

ИЛИ ЖЕ

<a href = "/createFamily" class = "button">Create family</a>

Создайте еще одну точку входа в сервис, не смешивайте две конечные точки вместе. Вы нарушаете принцип единой ответственности по дизайну, и это навредит вам в будущем:

@PostMapping(value = "addChild")
public String addChild(@RequestParam("first_name") String firstName,
                       @RequestParam("second_name") String secondName,
                       @RequestParam ("sex") String sex,
                       @RequestParam ("pesel") String pesel){

        ChildForm childForm = new ChildForm();
        childForm.setFirstName(firstName);
        childForm.setSecondName(secondName);
        childForm.setSex(sex);
        childForm.setPesel(pesel);
        childService.addChildToDB(childForm);

        return "AddChild";
}

@PostMapping(value = "createFamily")
public String createFamily(){
       return 'basic';    
}

Другие вопросы по теме