The question is published on by Tutorial Guruji team.
I created a form with using Thymeleaf which listened by controller. When I input a string that contains leading or trailing spaces (example: ” abc “.), the string auto trimmed in the controller (example: “abc”.). But I want to keep these leading or trailing spaces even the value passed into controller. How can I do that?
Example code:
Form with using Thymeleaf:
<form role="form" action="/" method="post" autocomplete="off" th:action="@{/change-password}" th:object="${form}"> <div> <label for="new-pass" th:text="#{password.newPassword}">New password</label> <input type="password" th:field="*{password}" th:placeholder="#{password.newPassword}" required="required" /> </div> <div> <button type="submit" th:text="#{confirm}">Change</button> <a href="/" th:href="@{/}" th:text="#{cancel}">Cancel</a> </div> </form>
Controller for page:
@RequestMapping(value = "/change-password", method = RequestMethod.GET) public String changePassword(@ModelAttribute("form") ChangeMyPasswordForm form) { return "/account/change-pass"; }
Controller that handling form action:
@RequestMapping(value = "/change-password", method = RequestMethod.POST) public void changeSelfPassword(ChangeMyPasswordForm form) { System.out.println(form.getPassword()); }
Class ChangeMyPasswordForm:
public class ChangeMyPasswordForm { private String password; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
The String that input in the form:
" abc "
Expected result in the controller System.out.println:
" abc "
Actual result:
"abc"
Answer
First you need to check where the values are being truncated thymeleaf or Spring?
You can do that by printing values using jquery/javascript before form submission.
By default spring it doesn’t trim the parameters. just check that you are NOT using StringTrimmerEditor like below.
@Controller public class MyFormController { @InitBinder public void initBinder(WebDataBinder binder) { binder.registerCustomEditor(String.class, new StringTrimmerEditor(true)); } // ... }