疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Spring MVC连载标签库之error


 

 
4.1.13 errors标签
Spring MVC的errors标签是对应于SpringMVC的Errors对象的,它的作用就是用于显示Errors对象中包含的错误信息。如果Errors不为null,则会渲染一个HTML 的span元素,用来显示错误信息。
表4.14 errors标签的属性
  属性
   描述
  
  cssClass
   定义要应用到被渲染的errors元素CSS类
  
  cssStyle
   定义要应用到被渲染的errors元素CSS样式
  
  htmlEscape
   boolean值,表示被渲染的值是否应该进行HTML转义
  
  delimiter
   定义两个input元素之间的分隔符,默认没有分隔符
  
  path
   要绑定的属性路径
  
 
利用errors标签来显示Errors的时候,是通过errors标签的path属性来绑定一个错误信息。可以通过path属性来显示两种类型的错误信息:
所有的错误信息,这个时候path的值应该置为“*”。
当前对象的某一个属性的错误信息,这个时候path的值应为所需显示的属性的名称。
示例:errors标签的使用
提示:errors标签的示例主要是演示errors标签的用法,关于Spring MVC验证的知识,在第6章重点介绍。
 
程序清单:codes/04/ErrorsTest/src/org/fkit/domain/User
 
public class User implements Serializable{
    private String username;
    private String sex;
    private Integer age;
    public User() {
        super();
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}
复制代码
 
程序清单:codes/04/ErrorsTest/src/org/fkit/validator/UserValidator
 
public class UserValidator implements Validator{
    @Override
    public boolean supports(Class<?> clazz) {
        return User.class.equals(clazz);
    }
    @Override
    public void validate(Object object, Errors errors) {
        // 验证username、sex和age是否为null
        ValidationUtils.rejectIfEmpty(errors, "username", null, "用户名不能为空");  
        ValidationUtils.rejectIfEmpty(errors, "sex", null, "性别不能为空"); 
        ValidationUtils.rejectIfEmpty(errors, "age", null, "年龄不能为空"); 
    }
}
复制代码
 
UserValidator类实现org.springframework.validation.Validator接口,完成验证的功能。
 
程序清单:codes/04/ErrorsTest/src/org/fkit/controller/UserController
 
@Controller
public class UserController{
     @GetMapping(value="/registerForm")
     public String registerForm(Model model) {
         User user = new User();
         // model中添加属性user,值是user对象
         model.addAttribute("user",user);
         return "registerForm";
     }
     @InitBinder  
     public void initBinder(DataBinder binder) {  
        // 设置验证的类为UserValidator
        binder.setValidator(new UserValidator());  
     } 
     @PostMapping(value="/register")
     public String register(@Validated User user, Errors errors) {
         // 如果Errors对象有Field错误时,重新跳回注册页面,否则正常提交
         if (errors.hasFieldErrors())  
             return "registerForm";  
         return "submit"; 
     }
}
复制代码
 
UserController类使用@InitBinder注解绑定验证对象。
 
程序清单:codes/04/ErrorsTest/WebContent/content/registerForm.jsp
 
<form:form modelAttribute="user" method="post" action="register" >
    <table>
        
        <tr>
            <td>姓名:</td>
            <td><form:input path="username"/></td>
            <td><font color="red"><form:errors path="username"/></font></td>
        </tr>
        <tr>
            <td>性别:</td>
            <td><form:input path="sex"/></td>
            <td><font color="red"><form:errors path="sex"/></font></td>
        </tr>
        <tr>
            <td>年龄:</td>
            <td><form:input path="age"/></td>
            <td><font color="red"><form:errors path="age"/></font></td>
        </tr>
        <tr>  
            <td><input type="submit" value="提交"/></td>  
        </tr>  
    </table>
</form:form>
复制代码
 
在registerForm.jsp页面中,在每个需要输入的控件后面增加了一个errors标签,用来显示错误信息。
web.xml文件和springmvc-config.xml文件与之前讲述的一致,此处不再赘述。
部署ErrorsTest这个Web应用,在浏览器中输入如下URL来测试应用:
http://localhost:8080/ErrorsTest/registerForm
复制代码
跳转到注册页面,如果不输入任何信息,则直接单击“注册”按钮,这样会提交请求。因为没有提交任何注册信息,故验证出错。register请求处理方法将会将请求重新转发到注册页面,errors标签会显示错误提示信息。如图4.10所示的界面。