Validation Freemarker模板中不显示Spring MVC验证错误

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

如果控制器返回绑定错误,我尝试在使用freemarker模板构建的“用户注册”页面中显示验证错误

我的控制器代码如下:

@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;">&nbsp;</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;">&nbsp;</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;">&nbsp;</label>
    <input type="submit" value="submit">
  </form>
</fieldset>
...