Thymeleaf th:text 在某些情况下不起作用

时间:2021-06-27 09:25:07

标签: java spring spring-boot thymeleaf

我开始在一个基本项目中使用 thymeleaf。当我想在注册页面中显示一条消息时,th:text 不起作用。我已经在其他 .html 文件中使用了 th:text 并且它在那里工作但在 signUp.html 中没有。

这是我设置消息的控制器:

package com.teszt.thymeleaftest.controller;

@Controller
@RequestMapping("/login")
@AllArgsConstructor
public class MemberController {

   MembersService membersService;

    @GetMapping("/login")
    public String showLoginPage(){

        return "/login/login";
    }

    @GetMapping("/signUp")
    public  String showSignUpPage(Model theModel){

        Members theMember = new Members();

        theModel.addAttribute("member", theMember);

        return "/login/signUp";
    }

    @PostMapping("/save")
    public String saveMember(@ModelAttribute("member")  Members theMember, ModelMap modelMap){

        Members tempMember = membersService.findByEmail(theMember.getEmail());

        if(tempMember != null){
            modelMap.addAttribute("error", "Email is already exist!");
            return "redirect:/login/signUp";
        }else{
            membersService.save(theMember);

            //prevent duplication
            return "redirect:/login/login";
        }

    }

}

这是我的 signUp.html

<!DOCTYPE HTML>
<html lang="en" xmlns:th="http://www.thymeleaf.org">

<head>

    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">


    <title>Signup</title>
</head>

<body>

<div class="container">

    <h3>Signup</h3>
    <hr>

    <p class="h4 mb-4">Signup</p>

    <form action="#" th:action="@{/login/save}" th:object="${member}" method="POST">

        <input type="text"  th:field="*{firstName}" class="form-control mb-4 col-4" placeholder="First name">

        <input type="text"  th:field="*{lastName}" class="form-control mb-4 col-4" placeholder="Last name">

        <input type="text"  th:field="*{email}"  class="form-control mb-4 col-4" placeholder="Email">

        <input type="password" th:field="*{password}" class="form-control mb-4 col-4" placeholder="Password">

        <button type="submit" class="btn btn-info col-2">Save</button>

        <p th:text="${error}" />

    </form>

    <br>

    Do you have an account? <a th:href="@{/login/login}">Click here</a>

</div>

</body>
</html>

正如我上面提到的,这是唯一一个 th:text 不起作用的 html,其他地方都很好。

希望有人能帮助我!

1 个答案:

答案 0 :(得分:1)

当您使用 redirect: 时,您将丢失所有模型属性(因为它正在加载一个新页面)。您需要改用 FlashAttribute。像这样:

@PostMapping("/save")
public String saveMember(@ModelAttribute("member") Members theMember, ModelMap modelMap, RedirectAttributes redirAttrs){
    Members tempMember = membersService.findByEmail(theMember.getEmail());

    if(tempMember != null){
        redirAttrs.addFlashAttribute("error", "Email is already exist!");
        return "redirect:/login/signUp";
    }else{
        membersService.save(theMember);
        //prevent duplication
        return "redirect:/login/login";
    }
}