Как передать поле из html, которое не является частью pojo? - PullRequest
1 голос
/ 25 января 2020

В моем приложении для весенней загрузки:

POJO:

@Entity
@Table(name = "usr") // PostgreSQL not work with table "user"
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    @NotNull
    private String username;
    @NotNull
    private String password;
    @NotNull
    private boolean active;
    @NotNull
    @ElementCollection(targetClass = Role.class, fetch = FetchType.EAGER)
    @CollectionTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"))
    @Enumerated(EnumType.STRING)
    private Set<Role> roles;

здесь Контроллер:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import ru.otus.software_architect.eshop.repo.UserRepository;

import java.util.Collections;

@Controller
public class RegistrationController {
    @Autowired
    private UserRepository userRepository;
    @Value("${spring.application.name}")
    private String appName;

    private static Logger logger = LogManager.getLogger(RegistrationController.class);

    @GetMapping("/registration.html")
    public String registration(Model model) {
        logger.info("open_registration.html");
        model.addAttribute("appName", appName);
        return "registration.html";
    }

    @PostMapping("/registration.html")
    public String registartionNewUser(User user, Model model) {
        logger.info("user = " + user);
        if (user.getUsername().trim().isEmpty()
                || user.getPassword().trim().isEmpty()
        ) {
            model.addAttribute("registrationError", "Аll fields are required!");
            return "registration.html";
        }
        user.setActive(true);
        user.setRoles(Collections.singleton(Role.USER));
        User userFromDb = userRepository.findByUsername(user.getUsername());
        if (userFromDb != null) {
            model.addAttribute("registrationError", "User already exist!");
            return "registration.html";
        }
        userRepository.save(user);

        return "redirect:/login.html";
    }
}

здесь html шаблон:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title th:text="${appName}">Template title</title>
    <link th:href="@{/public/style.css}" rel="stylesheet"/>
</head>
<body>
<div id="container">
    <h2 align="center">Registration new user</h2>
    <form th:action="@{/registration.html}" method="post">
        <label for="username">Username</label>
        <input type="text" id="username" name="username" autofocus="autofocus"/>
        <label for="password">Password</label>
        <input type="password" id="password" name="password"/>
        <label for="retypePassword">Retype password</label>
        <input type="password" id="retypePassword" name="retypePassword"/>
        <input id="submit" type="submit" value="Registration"/>
    </form>
    <p th:if="${registrationError}" th:text="${registrationError}" class="error"></p>
</div>
</body>
</html>

Как видите, я передаю POJO User из html и чек username и password заполнен. Ницца. Но мне также нужно проверить, равны ли password и retypePassword. Проблема в том, что retypePassword не является частью POJO User (нет свойства retypePassword). Как я могу передать retypePassword из html в метод registartionNewUser для проверки password и retypePassword?

1 Ответ

1 голос
/ 25 января 2020

имеет retypePassword в качестве другого аргумента в методе registartionNewUser.

public String registartionNewUser(User user, String retypePassword, Model model)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...