:: 首頁 ::  :: 聯(lián)系 :: 聚合  :: 管理

          Spring技術(shù)手冊筆記(六):Spring MVC 下

          Posted on 2009-11-16 19:26 codingliyi 閱讀(546) 評論(0)  編輯  收藏 所屬分類: Java EE

          搭配Controller的相關(guān)類

          一、實(shí)現(xiàn)Validator

          使用SimpleFormController時(shí),可以搭配一個(gè)Validator接口的實(shí)現(xiàn)對象,validator接口有兩個(gè)必須實(shí)現(xiàn)的方法:

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

          8

          supports()方法回傳一個(gè)boolean值,表示是否支持對所傳入的對象進(jìn)行驗(yàn)證,只有在傳回true的情況下,才會(huì)使用validate()方法驗(yàn)證。

          validate()方法的參數(shù)obj表示傳入的表單對象,可對其進(jìn)行驗(yàn)證,如有錯(cuò),可使用Errorsreject()rejectValue()方法加入錯(cuò)誤信息。在后續(xù)的處理中,若errors中包含錯(cuò)誤信息,會(huì)回到getViewPage()所設(shè)定的對象。

          一個(gè)簡單的表單驗(yàn)證示例:

          LoginValidator.java

           1public 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>

          在進(jìn)行驗(yàn)證時(shí),可以使用ValidationUtils,上面提供了一些靜態(tài)方法,如rejectIfEmpty()、rejectIfEmptyOrWhitespace()等等。

          二、文件上傳

          如要實(shí)現(xiàn)文件上傳,可以使用實(shí)現(xiàn)了MultipartResolver接口的類。Spring提供了CommonMultipartResolverCosMultipartResolver,分別支持Commands FileUploadCOS FileUpload。

          示例如下,加入設(shè)計(jì)了一個(gè)FileForm類:

           1public 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數(shù)組,使用者上傳的文件可以由ByteArrayMultipartFileEditor轉(zhuǎn)換為byte數(shù)組并設(shè)定給FileForm。這必須在Controller中定義。如下:

           1public 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}

          依以上的設(shè)定,文件上傳后會(huì)儲(chǔ)存在指定的目錄。要使用文件上傳的功能,必須在定義文件中加入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>

          主站蜘蛛池模板: 鄂托克前旗| 湾仔区| 宜丰县| 富蕴县| 永登县| 黄梅县| 辰溪县| 云和县| 武邑县| 万宁市| 吴江市| 朔州市| 湾仔区| 东山县| 阳谷县| 嘉荫县| 长宁县| 泰顺县| 兴义市| 休宁县| 淮北市| 金阳县| 社会| 项城市| 城口县| 航空| 密山市| 铜山县| 平舆县| 信宜市| 攀枝花市| 准格尔旗| 固阳县| 武乡县| 温泉县| 西昌市| 汉中市| 青岛市| 浦城县| 秀山| 罗甸县|