How object passes from controller to html page in Thymeleaf

17 views Asked by At

Entity

public class UserVerification {

    private String email;
    private int otp;

    public UserVerification(String email, int otp) {
        this.email = email;
        this.otp = otp;
    }

Controller

@GetMapping(value = "/verification", params = "email")
    public String verificationPage(@RequestParam("email") String email, Model model) {
        UserVerification verification = new UserVerification();
        verification.setEmail(email); // setting value of email in object

        model.addAttribute("verification", verification);
        return "verification";
    }
    
    @PostMapping("/verify")
    public String verifyUser(@ModelAttribute("verification") UserVerification verification, Model model) {
        
        System.out.println(verification.getOtp()); // otp is proper
        System.out.println(verification.getEmail()); // email is null but why?

        if (userService.verifyUser(verification)) {
            return "redirect:/user/login";
        }

        model.addAttribute("verification", verification);
        return "verification?email=" + verification.getEmail();
    }

verification.html

          <form id="verifyForm" th:action="@{/user/verify}"
                th:object="${verification}" method="post">
                <label for="verificationCode"></label><input type="text"
                    th:field="*{otp}" id="verificationCode" name="verificationCode"
                    placeholder="Enter code"> <br>
                    
                    <small style="color: #dc3545"></small><br>
                <button class="btn btn-primary" type="submit" style="margin-top:20px">Verify</button>
            </form>

If I'm binding UserVerification to Model object after setting value of email. but when I'm catching same object Using Post method why value is lost here.

0

There are 0 answers