<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

    Posted on 2009-11-16 19:26 codingliyi 閱讀(544) 評論(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的情況下,才會使用validate()方法驗(yàn)證。

    validate()方法的參數(shù)obj表示傳入的表單對象,可對其進(jìn)行驗(yàn)證,如有錯(cuò),可使用Errorsreject()rejectValue()方法加入錯(cuò)誤信息。在后續(xù)的處理中,若errors中包含錯(cuò)誤信息,會回到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è)定,文件上傳后會儲存在指定的目錄。要使用文件上傳的功能,必須在定義文件中加入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>

    主站蜘蛛池模板: 亚洲av无码不卡久久| av无码久久久久不卡免费网站| 亚洲国产精品无码久久久| 亚洲精品久久久www| 黄色成人网站免费无码av| 无码人妻丰满熟妇区免费| caoporm碰最新免费公开视频| 亚洲一区二区三区91| 久久亚洲中文字幕精品有坂深雪 | 中国在线观看免费高清完整版| 国产羞羞的视频在线观看免费| 色屁屁在线观看视频免费| 亚洲日本VA午夜在线影院| 亚洲av产在线精品亚洲第一站| 亚洲Av无码专区国产乱码DVD| 亚洲乱码日产精品a级毛片久久| 免费观看男人免费桶女人视频| 四虎免费影院ww4164h| 在线毛片片免费观看| 一级女性全黄生活片免费看| 美女被免费网站在线视频免费| 亚洲精品无码专区久久| 精品亚洲456在线播放| 亚洲国产日韩女人aaaaaa毛片在线| 蜜芽亚洲av无码精品色午夜| 亚洲AV午夜福利精品一区二区 | 亚洲熟女乱色一区二区三区| 亚洲国产成人精品无码一区二区| 少妇中文字幕乱码亚洲影视| 国产亚洲人成网站在线观看不卡| 国产亚洲人成A在线V网站| 亚洲国产精品成人久久蜜臀| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 91频在线观看免费大全| 在线免费观看亚洲| 91久久青青草原线免费| 每天更新的免费av片在线观看| 亚洲高清视频免费| 亚洲人成网站免费播放| 免费激情视频网站| 免费人成网站在线播放|