java - 从 html 页面恢复 JAVA-Spring (with thymeleaf) 中的表单

标签 java spring forms spring-mvc thymeleaf

我是开发工具新手,我正在尝试使用 spring 和 thymeleaf 创建一个在网站上注册的表单。我目前无法将表单中的信息恢复到仅显示用户列表的另一个页面。 我使用 model/service/dao/controller java 文件在 Eclipse 中创建了一个经典的 Spring boot 安全性。

我的模型 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> {}

我的 Controller Java 文件 --> 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 和我在 Controller 中的试用 sysout 导致除 id 和高级内容( boolean 值)之外的所有内容均为空值

    <!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>

预先感谢您的帮助。 请随时询问我更多信息,以便更好地理解...

最佳答案

尝试在 registerAdd 方法中添加 @ModelAttribute("register"),所以它应该看起来像

@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";
}

希望能解决问题:)

关于java - 从 html 页面恢复 JAVA-Spring (with thymeleaf) 中的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49656103/

相关文章:

HTML 表单未对 Velocity 中的搜索 URL 进行编码

javascript - MeteorJS 电子邮件表单验证

java - 使正则表达式在 Windows 和 Linux 上兼容

java - TreeViewer 中类似节点的更新未正确进行

java - Hibernate-Spring boot : spring. jpa.hibernate.ddl-auto=update 更新实体后重新创建表和列

spring - 将 JTA、Hibernate 4 和 Spring 4 与 WebLogic 集成

Java 泛型和注解 : Type-Safe

java - 具有 Mysql JSON 类型的 Spring Data

spring - Spring项目的Java 9 Jigsaw(模块)有什么计划吗?

php - Symfony2 表单最佳实践