'How to handle bindingresult errors in mustache springboot
I am learning mustache with springboot. I am getting error page while handling the binding result.
My controller class method to handle request:
@PostMapping("/registerUser")
public String createNewBuyer(@ModelAttribute("user") @Valid MyUser user, final Model model, final BindingResult result) {
if (result.hasErrors()) {
model.addAttribute("user", user);
return "page-login-register";
}
String error = userService.checkIfUserExists(user);
if (error != null) {
model.addAttribute("registerError", error);
} else {
userService.saveUser(user);
}
return "page-login-register";
}
POJO class to map request variable and validate
@Data
public class MyUser implements Serializable {
private Integer userId;
@NotEmpty(message = "registration.validation.userName")
@Size(min = 3, message = "minimum size of username should be 3")
private String userName;
@NotEmpty(message = "registration.validation.firstName")
private String firstName;
@NotEmpty(message = "registration.validation.lastName")
private String lastName;
@NotEmpty(message = "registration.validation.email")
@Size(min = 5, max = 64, message = "Please enter a valid email")
private String email;
@NotEmpty(message = "registration.validation.password")
@Size(min = 5, max = 24, message = "Please enter a valid password.")
private String password;
private String confirmPassword;
@NotEmpty(message = "registration.validation.phoneNumber")
@Size(min = 10, message = "Please enter valid phone Number.")
private String phoneNumber;
}
Html code to submit request and show error
{{#registerError}}
<p class="mb-50 font-sm text-danger">
{{registerError}}
</p>
{{/registerError}}
{{#user}}
<form method="post" action="/registerUser" name="user">
{{#_csrf}}
<input type="hidden" name="{{parameterName}}" value="{{token}}"/>
{{/_csrf}}
<div class="form-group">
<input type="text" required="" name="userName" value="{{#userName}}{{userName}}{{/userName}}" placeholder="Username">
</div>
<div class="form-group">
<input type="text" required="" name="firstName" placeholder="First Name" value="{{#firstName}}{{firstName}}{{/firstName}}">
</div>
<div class="form-group">
<input type="text" required="" name="lastName" placeholder="Last Name" value="{{#lastName}}{{lastName}}{{/lastName}}">
</div>
<div class="form-group">
<input type="email" required="" name="email" placeholder="Email" value="{{#email}}{{email}}{{/email}}">
</div>
<div class="form-group">
<input type="phone number" required="" name="phoneNumber" placeholder="Phone Number" value="{{#phoneNumber}}{{phoneNumber}}{{/phoneNumber}}">
</div>
<div class="form-group">
<input required="" type="password" name="password" placeholder="Password">
</div>
<div class="form-group">
<input required="" type="password" name="confirmPassword" placeholder="Confirm password">
</div>
<div class="form-group">
<button type="submit" class="btn btn-fill-out btn-block hover-up" name="login">Submit & Register</button>
</div>
</form>
{{/user}}
When I am sending request with 3 digit password am not able to show same page and show the errors. I can achieve to handle this by adding validation into controller instead of pojo class but thats not good practice. I need help how to handle bindingresult exception and show in same page(using mustache).
Update:
I found some article where they said about order of parameter of method in controller. i.e. while writing parameters in a method write bindingresult class just after pojo class. like:
public String createNewBuyer(@ModelAttribute("user") @Valid MyUser user, final BindingResult result, final Model model) {
but now how to show them in mustache page just like thymeleaf handles. am working on it but if anybody have idea please help me.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
