美文网首页
渲染Web视图——使用Spring的表单绑定JSP库

渲染Web视图——使用Spring的表单绑定JSP库

作者: 鉴闻俗说 | 来源:发表于2017-04-04 16:39 被阅读0次

将表单绑定到模型上

  • Sping的表单绑定JSP标签库与原生的HTML标签库的区别在于他们会绑定模型中的一个对象,能够根据模型中对象的属性填充值
  • 使用表单绑定库,需要在JSP页面声明:
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
  • 一个注册页面的示例
<h1>Regiter</h1>
    <sf:form method="post" commandName="spitter">
        First Name: <sf:input path="firstName" /><br>
        Last Name: <sf:input path="lastName" /><br>
        User Name: <sf:input path="userName" /><br>
        Password: <sf:input path="password" /><br>
        <input type="submit" value="Regiter">
    </sf:form>

<sf:form>会渲染一个HTML<form>标签,但它会通过commandName属性构建针对某个模型对象的上下文信息。在其他的表单绑定标签中,会引用这个模型对象的属性。
因为上面的代码中,commandName属性设置为spitter,因此,在模型中必须要有一个key为spitter的对象,否则的话,表单不能正常渲染(会出现JSP错误)。于是必须修改一下SpitterController:

 @RequestMapping(value = "/register", method = RequestMethod.GET)
    public String showRegistrationForm(Model model) {
        model.addAttribute(new Spitter());
        return "registerForm";
    }

展现错误

  • 在输入域的旁边展示错误信息
<sf:form method="post" commandName="spitter">
        First Name: <sf:input path="firstName" />
            <sf:errors path="firstName" cssClass="error"/> <br>
       ...
    </sf:form>

path属性设置成firstName,也就指定了要显示Spitter模型中哪个属性的错误。通过设置cssClass属性可以修改错误的样式。

  • 将所有错误信息在同一个地方显示
    移除每个输入域上的 <sf:errors>元素,并将其放到表单的顶部
<sf:form method="post" commandName="spitter">
        <sf:errors path="*" element="div" cssClass="errors" />
       ...
    </sf:form>

此处path被设置为“*”,这是一个通配符选择器,会告诉<sf:errors>展现所有属性的错误。

  • 着重显示需要修正的输入域
    通过为每个输入域设置cssErrorClass属性,也可以将label都替换为<sf:label>,并设置它的cssErrorClass属性。
<sf:form method="post" commandName="spitter">
        <sf:errors path="*" element="div" cssClass="errors" />
        <sf:label path="firstName"
                  cssClass="error">First Name:</sf:label>
        <sf:input path="firstName" cssClass="error"/><br/>
       ...
    </sf:form>
  • 为了能够让这些错误信息更加易懂,可以在Spitter类的校验注解上设置message属性。
@NotNull
    @Size(min = 2, max = 30, message = "{firstName.size}")
    private String firstName;

    @NotNull
    @Size(min = 2, max = 30, message = "{lastName.size}")
    private String lastName;

    @NotNull
    @Size(min = 5, max = 16, message = "{userName.size}")
    private String userName;

    @NotNull
    @Size(min = 2, max = 25, message = "{password.size}")
    private String password;

将上面每个域@Size注解的message设置为一个字符串,如果没有用大括号括起来的话,message中的值将会作为展现给用户的错误信息。但是使用了大括号之后,我们使用的就是属性文件中的某一个信息,给属性包含了实际的信息
接下来需要创建一个ValidationMessages.properties的文件,并将其放在根类路径下

firstName.size=First name must be between {min} and {max} characters long.
lastName.size=Last name must be between {min} and {max} characters long.
userName.size=userName must be between {min} and {max} characters long.
password.size=Password must be between {min} and {max} characters long.

ValidationMessages.properties文件中的每条信息的Key值对应于注解中message属性占位符的值。同时最大和最小长度没有硬编码在ValidationMessages.properties文件中,也是用了占位符——{max}和{min},他们会引用@Size注解上所设置的max和min属性。
可以创建任意数量的ValidationMessages.properties文件,来涵盖所支持的语言和地区

相关文章

网友评论

      本文标题:渲染Web视图——使用Spring的表单绑定JSP库

      本文链接:https://www.haomeiwen.com/subject/sjzoottx.html