简介
详细介绍spring框架中的JSP库,还有就是介绍如何显示校验错误
JSP标签库
Spring提供了两个JSP标签库,其中一个标签库会用来渲染HTML表单标签,另一类标签库包含了一些工具类标签
spring表单标签库
为了使用表单绑定库,需要在JSP中这样进行声明
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
这个前缀可以根据个人喜好进行设置
<sf:form>
:渲染成一个HTML的form标签
<sf:input>
:渲染成一个HTML的input标签,其type属性是text
<sf:checkbox>
:渲染成一个HTML的input标签,其type属性是checkbox
<sf:hidden>
:渲染成一个HTML的input标签,其type属性是hidden
<sf:label>
:渲染成一个HTML的label标签
<sf:password>
:渲染成一个HTML的input标签,其type属性是password
<sf:select>
:渲染成一个HTML的select标签
<sf:option>
:渲染成一个HTML的option标签
<sf:textarea>
:渲染成一个HTML的textarea标签
<sf:radiobutton>
:渲染成一个HTML的input标签,其type属性是radio
<sf:error>
:在一个HTML<span>
中渲染输入域的错误
实例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
<title>LOGIN</title>
<link rel="stylesheet" href="<%=request.getContextPath()%>/css/style.css">
</head>
<body>
<sf:form method="post" commandName="user" action="display">
name:<sf:input path="name" cssErrorClass="error"/>
<sf:errors path="name" cssClass="error"/>
<br>
password:<sf:password path="password"/>
<sf:errors path="password"/>
<br>
age:<sf:input path="age" type="number"/>
<sf:errors path="age"/>
<br>
<input type="submit" value="SUBMIT">
</sf:form>
</body>
</html>
注意:sf:form标签中的commandName属性,表示上下文中模型必须要有一个key为user的对象,否则表单将不能正常渲染
其中path属性相当于input标签中的name属性
sf:error,表示如果某个校验失败,那么将会将这个错误信息渲染一个span标签中
还可进行设置错误显示的样式,其属性就是sf:error中的cssStyle属性,如果是其他标签,那么需要是cssErrorClass,这时候只需要在css样式文件中设置相应的属性即可
spring通用标签库
首先要使用必须在页面上进行以下声明
<%@ taglib prefix="s" uri="http://www.springframework.org/tags" %>
常用的标签有:
<s:message>
:主要是展现国际化信息
<s:url>
:创建url
<s:escapeBody>
:转义标签
第一个如果有需求可以自己查找下相关文档,主要介绍后两个标签
s:url
:是一个很小的标签,但是很常用,它是JSTL中c:url
标签的替代者,但是它具有一些特殊的技巧
1.会在创建的时候预先添加上Servlet上下文路径
<a href="<c:url value="/login" />">Login</a>
2.可以使用s:url创建url,并将其赋值给一个变量供模版在稍后使用
<s:url value="/login" var="login"/>
<a href="<c:url value="${login}" />">Login</a>
3.添加参数
<c:url value="/other" var="otherLink">
<c:param name="index" value="100"/>
</c:url>
<a href="${otherLink}">otherLink</a>
<s:url value="/link/{start}" var="link">
<s:param name="start" value="90"/>
</s:url>
<a href="${link}">link</a>
有时候可能需要在页面上展现代码片段,如果自己去转义一些标签肯定是很麻烦的,还有就是代码不易阅读,那么可以使用<s:escapeBody>
这个标签
如:
<s:escapeBody htmlEscape="true">
<h1>hello,world</h1>
</s:escapeBody>
表单错误校验
首先需要添加一个依赖
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.3.5.Final</version>
</dependency>
然后声明一个对象User,并为其添加上一些验证标签,其实在上一篇博客已经写好了,只是使用,没有做详细介绍
User.java
package cn.simfg.note.web.pojo;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
/**
* @Author: simfg
* @Description:
* @Date: 2017/10/7
*/
public class User {
@NotNull
@Size(min = 2, max = 16,message = "{user.name}")
private String name;
@NotNull
@Size(min = 2, max = 16)
private String password;
@NotNull
@Min(16)
private int age;
public User() {
}
public User(String name, String password, int age) {
this.name = name;
this.password = password;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" + "name='" + name + '\'' + ", password='" + password + '\'' + ", age=" + age
+ '}';
}
}
常用的验证标签:
@Null
被注释的元素必须为 null
@NotNull
被注释的元素必须不为 null
@AssertTrue
被注释的元素必须为 true
@AssertFalse
被注释的元素必须为 false
@Min(value)
被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value)
被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value)
被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value)
被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=)
被注释的元素(数组、字符)的大小必须在指定的范围内
@Digits (integer, fraction)
被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past
被注释的元素必须是一个过去的日期
@Future
被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=)
被注释的元素必须符合指定的正则表达式
控制器中对对象进行校验,如下
@RequestMapping(value = "display", method = RequestMethod.POST)
public String display(
@Valid
@ModelAttribute("user")
User user, Errors errors,
Map model) {
if (errors.hasErrors()) {
return "login";
}
model.put("user", user);
return "display";
}
@Valid,需要进行校验的参数
@ModelAttribute(“user”),校验的参数对象是什么,一般与页面上的commandName一样即可
注意Errors这一类型的参数必须紧跟在校验的参数后面,否则无法接受到参数
自定义错误信息,只需要在验证标签中添加message这一个属性即可,当然如果编写在java文件中,不便于修改,所以选择使用属性文件来解决这一问题
首先在resources文件新建一个ValidationMessages.properties,文件内容如下
# annotation
user.name= name must be between {min} and {max} characters long;
然后在校验标签就可以这样表示
@NotNull
@Size(min = 2, max = 16,message = "{user.name}")
private String name;
页面上的错误展示则是使用<sf:errors>
扫描二维码,欢迎关注个人公众号:SimFG