Я новичок в инструментах разработки, и я пытаюсь использовать 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é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élé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é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éphile</option>
<option value = "scenarist">Scé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énom</th>
<th>Sexe</th>
<th>Pays</th>
<th>Téléphone</th>
<th>Langues parlé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>
Заранее спасибо за помощь. Не стесняйтесь спрашивать меня больше, чтобы лучше понять ...




Попробуйте добавить @ModelAttribute("register") в свой метод registerAdd, чтобы он выглядел так:
@RequestMapping(value = "/register/add", method=RequestMethod.POST)
public String registerAdd(@ModelAttribute("register") @Valid Register register, BindingResult result, Model model)
Сообщите мне, была ли это проблема.
Добавьте эту строку в ваше сопоставление 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";
}
Надеюсь, это решит проблему :)
Вы пробовали изменить примитив Long на объект Long? Не забудьте изменить его в геттерах и сеттерах.
Пожалуйста, проверьте мой последний ответ, я внес правку :) Помните о @ModelAttribute
Спасибо за ответ. Тем не менее, это не решило мою проблему, я все равно получил ошибку ('org.thymeleaf.spring5.processor.SpringInputGeneralFieldTag Processor'), которая связана с "th: field" в моем файле form.html. Если я изменю " th: field "by" name "Я не получаю никаких ошибок, но форма не сохраняется (как показано в моей таблице в файле valid.html или в моей консоли с моим sysout).