Восстановить форму в JAVA-Spring (с тимелеафом) со страницы html

Я новичок в инструментах разработки, и я пытаюсь использовать Spring с тимелеафом, чтобы создать форму для регистрации на веб-сайте. В настоящее время я не могу восстановить информацию из формы на другую страницу, на которой отображается только список пользователей. Я создаю классическую систему безопасности загрузки Spring в Eclipse с помощью java-файлов модели / службы / dao / контроллера.

Моя модель java-файл -> Register.java

@Entity
public class Register {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    private String pseudo;
    private String lastname;
    private String firstname;
    private String sex;
    private String country;
    private String phone;
    private String spokenlanguages;
    private String email;
    private String password;
    private String job;
    private boolean premium;

    public void updateRegister(String pseudo, String lastname, String firstname, String sex, String country, String phone,
            String spokenlanguages, String email, String password, String job, boolean premium) {
        this.pseudo = pseudo;
        this.lastname = lastname;
        this.firstname = firstname;
        this.sex = sex;
        this.country = country;
        this.phone = phone;
        this.spokenlanguages = spokenlanguages;
        this.email = email;
        this.password = password;
        this.job = job;
        this.premium = premium;
// with all the getters & setters
    }

My Service java file --> RegisterService.java

    public interface RegisterService {
    public List<Register> list();
    public Register getById(long id);
}

Файл Java "Мой репозиторий" -> RegisterRepository.java

    @Repository
public interface RegisterRepository extends PagingAndSortingRepository<Register, Long> {}

Файл Java My Controller -> RegisterController.java

    @Controller
public class RegisterController {

    @Autowired
    RegisterRepository registerRepository;

    @RequestMapping(value = "/register", method=RequestMethod.GET)
    public String form (Model model) {
        return "register/form";
    }

    @PostMapping("/register/add")
    public String registerAdd(
            @Valid Register register,
            BindingResult result,
            Model model) {
        if (result.hasErrors()) {
            return "redirect:/error";
        }
        else {

            Register r = new Register();
            r.updateRegister(register.getPseudo(), 
            register.getLastname(),
            register.getFirstname(), 
            register.getSex(),
            register.getCountry(),
            register.getPhone(),
            register.getSpokenlanguages(),
            register.getEmail(),
            register.getPassword(),
            register.getJob(),
            register.isPremium());
            System.out.println(r);

            registerRepository.save(r);

            model.addAttribute("registerlist", registerRepository.findAll());
            return "register/valid";
        }
    }

    @RequestMapping(value = "/register/valid", method=RequestMethod.GET)
    public String list (Model model) {
        return "redirect:/home";
    }

}

Моя форма в HTML -> form.html

    <!DOCTYPE HTML>
<html xmlns:th = "http://www.thymeleaf.org/">
<head>
<title>Formulaire d'inscription</title>
<meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" />
<link rel = "stylesheet"
    href = "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
    integrity = "sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
    crossorigin = "anonymous">
<script
    src = "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
    integrity = "sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
    crossorigin = "anonymous"></script>
</head>
<body>
    <h1 class = "register">Formulaire d'inscription</h1>
    <form action = "#" method = "post" th:object = "${register}" th:action = "@{/register/add}">
        <div class = "form-group">
            <label for = "pseudo">Pseudo</label> <input type = "text"
                class = "form-control" id = "pseudo" placeholder = "Pseudo"
                th:field = "*{pseudo}" required = "required">
        </div>

        <div class = "form-group">
            <label for = "lastname">Nom</label> <input type = "text"
                class = "form-control" id = "lastname" placeholder = "Nom"
                th:field = "*{lastname}" required = "required">
        </div>

        <div class = "form-group">
            <label for = "firstname">Pr&eacute;nom</label> <input type = "text"
                class = "form-control" id = "firstname" placeholder = "Prenom"
                th:field = "*{firstname}" required = "required">
        </div>

        <div class = "form-group radio">
            <label for = "sex">Sexe</label><br /> 
            <label for = "male">Homme<input
                type = "radio" class = "form-control" id = "sex" value = "male"
                th:field = "*{sex}" required = "required">
            </label> <label for = "female">Femme<input type = "radio"
                class = "form-control" th:field = "*{sex}" id = "sex" value = "female">
            </label> <label for = "other">Autre<input type = "radio"
                class = "form-control" th:field = "*{sex}" id = "sex" value = "other"></label>
        </div>

        <div class = "form-group">
            <label for = "country">Pays</label> <br /> <select th:field = "*{country}" required = "required">
                <option value = "France" selected = "selected">France</option>
                ....other countries...

            </select>
        </div>

        <div class = "form-group">
            <label for = "phone">T&eacute;l&eacute;phone</label> <label
                class = "optional">(Facultatif)</label> <input type = "text"
                class = "form-control" id = "phone" placeholder = "Téléphone" th:field = "*{phone}">
        </div>

        <div class = "form-group">
            <label for = "spokenlanguages">Langues parl&eacute;es</label> <input
                type = "text" class = "form-control" id = "spokenlanguages"
                placeholder = "Langues" th:field = "*{spokenlanguages}" required = "required">
        </div>

        <div class = "form-group">
            <label for = "email">Adresse Email</label> <input type = "email"
                class = "form-control" id = "email" aria-describedby = "emailHelp"
                placeholder = "Email" th:field = "*{email}" required = "required">
        </div>

        <div class = "form-group">
            <label for = "emailconf">Confirmez votre adresse Email</label> <input
                type = "email" class = "form-control" id = "emailconf"
                aria-describedby = "emailHelp" placeholder = "" required = "required">
        </div>


        <div class = "form-group">
            <label for = "password">Mot de passe</label> <input type = "password"
                class = "form-control" id = "password" placeholder = ""
                th:field = "*{password}" required = "required">
        </div>

        <div class = "form-group">
            <label for = "passwordconf">Confirmez votre mot de passe</label> <input
                type = "password" class = "form-control" id = "passwordconf"
                placeholder = "" required = "required">
        </div>

        <div class = "form-group">
            <label for = "job">Travail</label> <br /> <select id = "job"
                th:field = "*{job}" required = "required">
                <option value = "alexandre">Alexandre</option>
                <option value = "filmlover">Cin&eacute;phile</option>
                <option value = "scenarist">Sc&eacute;nariste</option>
                <option value = "productor">Producteur</option>
                <option value = "other">Autres</option>
            </select>
        </div>

        <div class = "form-group radio">
            <label for = "premium">Premium</label><br />
            <label for = "yes">Oui<input
                type = "radio" class = "form-control" id = "premium"
                value = "yes" th:field = "*{premium}" required = "required">
            </label>
            <label for = "no">Non<input type = "radio" class = "form-control"
                th:field = "*{premium}" id = "premium" value = "no">
            </label>
        </div>

        <input type = "submit" class = "btn btn-primary" id = "valider" name = "valider" value = "Valider" />
    </form>
    <a href = "../home" > <input  class = "btn btn-primary" type = "reset" value = "Annuler" /></a>
</body>
</html>

и мой второй HTML -> valid.html, где я хочу сначала увидеть, что регистрация прошла успешно ... но я получил на этой странице это сообщение -> org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagProcessor и мой пробный sysout в контроллере приводят к нулевым значениям для всего, кроме идентификатора и премиального материала (логическое значение)

    <!DOCTYPE HTML>
<html xmlns:th = "http://www.thymeleaf.org/">
<head>
<title>Formulaire d'inscription</title>
<meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" />
<link rel = "stylesheet"
    href = "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
    integrity = "sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
    crossorigin = "anonymous">
<script
    src = "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
    integrity = "sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
    crossorigin = "anonymous"></script>
</head>

<body>
    <h1 class = "register">Confirmation de votre inscription</h1>
<!--        <h2 class  = "register" th:text = "${'Bienvenue ' + register.pseudo}"></h2> -->

    <div class = "container">
        <div class = "page-header" id = "banner">
            <div class = "row">
                <div class = "col-lg-8 col-md-7 col-sm-6">
                    <h1>Utilisateurs</h1>
                    <table class = "table table-striped table-hover">
                        <thead>
                            <tr>
                                <th>Id</th>
                                <th>Pseudo</th>
                                <th>Nom</th>
                                <th>Pr&eacute;nom</th>
                                <th>Sexe</th>
                                <th>Pays</th>
                                <th>T&eacute;l&eacute;phone</th>
                                <th>Langues parl&eacute;es</th>
                                <th>E-mail</th>
                                <th>Mot de passe</th>
                                <th>Travail</th>
                                <th>Premium</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr th:each = "register : ${registerlist}">
                                <td th:text = "${register.id}"></td>
                                <td th:text = "${register.pseudo}"></td>
                                <td th:text = "${register.lastname}"></td>
                                <td th:text = "${register.firstname}"></td>
                                <td th:text = "${register.sex}"></td>
                                <td th:text = "${register.country}"></td>
                                <td th:text = "${register.phone}"></td>
                                <td th:text = "${register.spokenlanguages}"></td>
                                <td th:text = "${register.email}"></td>
                                <td th:text = "${register.password}"></td>
                                <td th:text = "${register.job}"></td>
                                <td th:text = "${register.premium}"></td>
                                <td th:text = "${register.id}"></td>

                            </tr>
                        </tbody>
                    </table>
            </div>
    </div>
<a href = "../home" > <input  class = "btn btn-primary" type = "reset" value = "Retour" /></a>

</body>
</html>

Заранее спасибо за помощь. Не стесняйтесь спрашивать меня больше, чтобы лучше понять ...

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

Ответы 1

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

Попробуйте добавить @ModelAttribute("register") в свой метод registerAdd, чтобы он выглядел так:

@RequestMapping(value = "/register/add", method=RequestMethod.POST)
public String registerAdd(@ModelAttribute("register") @Valid Register register, BindingResult result, Model model) 

Сообщите мне, была ли это проблема.

Редактировать1

Добавьте эту строку в ваше сопоставление GET

model.addAttribute("register", new Register());

Так должно получиться:

@RequestMapping(value = "/register", method = RequestMethod.GET)
public String form(Model model) {
    model.addAttribute("register", new Register());
    return "register/form";
}

Надеюсь, это решит проблему :)

Спасибо за ответ. Тем не менее, это не решило мою проблему, я все равно получил ошибку ('org.thymeleaf.spring5.processor.SpringInputGeneralFieldTag‌ Processor'), которая связана с "th: field" в моем файле form.html. Если я изменю " th: field "by" name "Я не получаю никаких ошибок, но форма не сохраняется (как показано в моей таблице в файле valid.html или в моей консоли с моим sysout).

AdrienB 04.04.2018 22:26

Вы пробовали изменить примитив Long на объект Long? Не забудьте изменить его в геттерах и сеттерах.

Jacek Kuliś 04.04.2018 23:28

Пожалуйста, проверьте мой последний ответ, я внес правку :) Помните о @ModelAttribute

Jacek Kuliś 04.04.2018 23:56

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