Spring技术手册笔记(六):Spring MVC 下

搭配Controller的相关类

一、实现Validator

使用SimpleFormController时,可以搭配一个Validator接口的实现对象,validator接口有两个必须实现的方法:

1 Public  interface  Validator  {
2
3boolean supports(Class clazz);
4
5void validate(Object obj, Errors errors);
6
7}

8

supports()方法回传一个boolean值,表示是否支持对所传入的对象进行验证,只有在传回true的情况下,才会使用validate()方法验证。

validate()方法的参数obj表示传入的表单对象,可对其进行验证,如有错,可使用Errors的reject()或rejectValue()方法加入错误信息。在后续的处理中,若errors中包含错误信息,会回到getViewPage()所设定的对象。

一个简单的表单验证示例:

LoginValidator.java

 1 public   class  LoginValidator  implements  Validator  {
 2
 3    public boolean supports(Class clazz) {
 4        return clazz.equals(LoginForm.class);
 5    }

 6
 7    public void validate(Object obj, Errors errors) {
 8        LoginForm form = (LoginForm)obj;
 9        if(form.getUsername() == null ||form.getUsername().equals(""))
10            errors.rejectValue("username""empty"null"用户名不能为空");
11        if(form.getPassword() == null ||form.getPassword().equals(""))
12            errors.rejectValue("password""empty"null"密码不能为空");
13    }

14}

applicationContext.xml

1 < bean  id ="loginValidator"  class ="SpringMVC.LoginValidator"   />
2
3 < bean  id ="loginController"  class ="SpringMVC.LoginController" >
4      < property  name ="successView"  value ="loginSuccess"   />
5      < property  name ="formView"  value ="login"   />
6      < property  name ="validator"  ref ="loginValidator"   />
7 </ bean >

在进行验证时,可以使用ValidationUtils,上面提供了一些静态方法,如rejectIfEmpty()、rejectIfEmptyOrWhitespace()等等。

二、文件上传

如要实现文件上传,可以使用实现了MultipartResolver接口的类。Spring提供了CommonMultipartResolver与CosMultipartResolver,分别支持Commands FileUpload与COS FileUpload。

示例如下,加入设计了一个FileForm类:

 1 public   class  FileForm  {
 2    private String name;
 3    private byte[] contents;
 4    
 5    public String getName() {
 6        return name;
 7    }

 8    public void setName(String name) {
 9        this.name = name;
10    }

11    public byte[] getContents() {
12        return contents;
13    }

14    public void setContents(byte[] contents) {
15        this.contents = contents;
16    }

17}

FileForm中接受文件上传的属性类型是byte数组,使用者上传的文件可以由ByteArrayMultipartFileEditor转换为byte数组并设定给FileForm。这必须在Controller中定义。如下:

 1 public   class  UploadController  extends  SimpleFormController  {
 2    private String path;
 3    
 4    public UploadController(){
 5        this.setCommandClass(FileForm.class);
 6    }

 7
 8    @Override
 9    protected ModelAndView onSubmit(HttpServletRequest request,
10            HttpServletResponse response, Object command, BindException errors)
11            throws Exception {
12        FileForm form = (FileForm)command;
13        String storedPath = path + System.getProperty("file.separator"+ form.getName();
14        FileOutputStream fos = new FileOutputStream(storedPath);
15        fos.write(form.getContents());
16        fos.close();
17        return new ModelAndView(this.getSuccessView(), "filename", form.getName());
18    }

19    
20    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
21        super.initBinder(request, binder);
22        binder.registerCustomEditor(byte[].classnew ByteArrayMultipartFileEditor());
23    }

24    
25    public void setPath(String path){
26        this.path = path;
27    }

28}

依以上的设定,文件上传后会储存在指定的目录。要使用文件上传的功能,必须在定义文件中加入multipartResolver的定义。

1 < bean  id ="multipartResolver"  class ="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
2      < property  name ="maxUploadSize"  value ="100000"   />
3 </ bean >
4
5 < bean  id ="uploadController"  class ="SpringMVC.UploadController" >
6      < property  name ="successView"  value ="uploadSuccess"   />
7      < property  name ="formView"  value ="upload"   />
8      < property  name ="path"  value ="E:\upload"   />
9 </ bean >
下面是上传HTML页面的代码:
1 < form  name ="loginForm"  action ="upload.do"  method ="POST"  enctype ="multipart/form-data" >
2     上传后文件名: < input  type ="text"  name ="name" />< br />
3     选择文件: < input  name ="contents"  type ="file" />< br />
4      < input  type ="submit"  value ="上传"   />
5 </ form >



你可能感兴趣的:(Spring技术手册笔记(六):Spring MVC 下)