Validation Freemarker模板中不显示Spring MVC验证错误
如果控制器返回绑定错误,我尝试在使用freemarker模板构建的“用户注册”页面中显示验证错误 我的控制器代码如下:Validation Freemarker模板中不显示Spring MVC验证错误,validation,spring-mvc,spring-security,freemarker,Validation,Spring Mvc,Spring Security,Freemarker,如果控制器返回绑定错误,我尝试在使用freemarker模板构建的“用户注册”页面中显示验证错误 我的控制器代码如下: @Controller @RequestMapping("/") public class UserController { @Autowired private UserService userService; @Autowired private SecurityService securityService; @Autowired private UserVali
@Controller
@RequestMapping("/")
public class UserController {
@Autowired
private UserService userService;
@Autowired
private SecurityService securityService;
@Autowired
private UserValidator userValidator;
@RequestMapping(value = "/registration", method = RequestMethod.GET)
public String registration(Model model) {
model.addAttribute("userForm", new User());
return "registration";
}
@RequestMapping(value = "/registration", method = RequestMethod.POST)
public String registration(@ModelAttribute("useraccount") User userForm, BindingResult bindingResult, Model model) {
userValidator.validate(userForm, bindingResult);
if (bindingResult.hasErrors()) {
return "registration";
}
userService.save(userForm);
securityService.autologin(userForm.getUsername(), userForm.getPasswordConfirm());
return "redirect:/explore";
}
虽然这是registration.ftl freemarker模板,但我正在尝试构建:
<div>
<fieldset>
<h1>Create your Account</h1>
<form id="regForm" class="idealform" action="registration" method="post" name='useraccount'>
Username: <input type="text" name="username" /> <errors path="username" cssClass="error"/><br/>
Password: <input type="text" name="password" /><errors path="password" cssClass="error"/><br/>
<label class="main-label" style="width: 91px;"> </label>
<input type="submit" value="submit">
</form>
</fieldset>
创建您的帐户
用户名:
密码:
我还尝试了此处推荐的解决方案:
而registration.ftl变为:
<#assign form=JspTaglibs["http://www.springframework.org/tags/form"] />
<#macro formErrors>
<#assign formErrors><@form.errors path="*" /></#assign>
<#if formErrors?has_content>
<div id="errors">
<@spring.message "admin.error.globalMessage" />
</div>
</#if>
</#macro>
<div>
<fieldset>
<h1>Create your Account</h1>
<@form.form id="regForm" class="idealform" action="registration" method="post" name='useraccount'>
Username: <input type="text" name="username" path="username" /> <br/>
Password: <input type="text" name="password" path="password" /><br/>
<@formErrors />
<label class="main-label" style="width: 91px;"> </label>
<input type="submit" value="submit">
</@form.form>
</fieldset>
</div>
创建您的帐户
用户名:
密码:
但仍然不会显示验证消息
你能和我谈谈你对这个问题的看法吗?
非常感谢。我将您的控制器代码改写为如下内容:
@Controller
@RequestMapping("/")
public class UserController {
@Autowired
private UserService userService;
@Autowired
private SecurityService securityService;
@Autowired
private UserValidator userValidator;
@RequestMapping(value = "/registration", method = RequestMethod.GET)
public String registration(@ModelAttribute(name = "userForm") User user) {
return "registration";
}
@RequestMapping(value = "/registration", method = RequestMethod.POST)
public String registration(@ModelAttribute(name = "userForm") User user, BindingResult result) {
userValidator.validate(user, result);
if (result.hasErrors()) {
return "registration";
}
userService.save(user);
securityService.autologin(user.getUsername(), user.getPasswordConfirm());
return "redirect:/explore";
}
}
1) 如果使用不带参数的构造函数,则无需使用model.addAttribute(“modelName”,model)
,而是可以使用@modeldattribute
注释指定name属性(默认情况下,名称来自类名)。您只需确保此模型处于一致状态。此外,还需要传递与视图中使用的名称完全相同的名称(freemarker模板)
现在是“注册.ftl”
。。。
...
创建您的帐户
用户名:
${error}
密码:
${error}
...
1) 您需要
才能添加非常有用的spring用户定义指令。2) 使用
指令将以下输入绑定到您的模型。这里“userForm”是您的模型,“username”是您要绑定的字段。该指令还声明了新变量“spring.status”,该变量包含一个“expression”变量(对于路径和“value”),用于在表单返回错误时填充表单,以及BindingResult中的“errorMessages”。3) 如果您使用一个消息源来支持不同的语言,您应该将
${error}
更改为类似
的内容,否则您只能得到消息代码。希望能有帮助
...
<#import "/spring.ftl" as spring/>
...
<fieldset>
<h1>Create your Account</h1>
<form id="regForm" class="idealform" action="<@spring.url '/registration'/>" method="post">
<@spring.bind 'userForm.username'/>
Username: <input type="text" name="${spring.status.expression}" value="${spring.status.value?html}"/>
<#list spring.status.errorMessages as error>
<span class="error">${error}</span>
<br>
</#list>
<@spring.bind 'userForm.password'/>
Password: <input type="password" name="${spring.status.expression}" value="${spring.status.value?html}"/>
<#list spring.status.errorMessages as error>
<span class="error">${error}</span>
<br>
</#list>
<label class="main-label" style="width: 91px;"> </label>
<input type="submit" value="submit">
</form>
</fieldset>
...