<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)類

    一、實現(xiàn)Validator

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

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

    8

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

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

    一個簡單的表單驗證示例:

    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>

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

    二、文件上傳

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

    示例如下,加入設(shè)計了一個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午夜福利一片免费看久久| 亚洲黄色免费在线观看| 国产精品久久久久影院免费| a毛看片免费观看视频| 亚洲熟女精品中文字幕| 亚洲综合av永久无码精品一区二区| 免费在线观看h片| 一日本道a高清免费播放| 亚洲宅男精品一区在线观看| 亚洲日本在线观看视频| 在线视频免费观看高清| 伊人免费在线观看| 精品国产亚洲AV麻豆| 亚洲无限乱码一二三四区| 国产亚洲美女精品久久久2020| 一个人免费观看www视频在线| 99在线热播精品免费99热| 亚洲乱妇老熟女爽到高潮的片 | 国产亚洲人成网站在线观看| 美女被免费喷白浆视频| 成人性生交大片免费看无遮挡 | 亚洲电影国产一区| 亚洲成av人片在线观看天堂无码| 99久久国产热无码精品免费 | 99久久人妻精品免费二区| 一级特黄录像视频免费| 亚洲欧洲AV无码专区| 91亚洲精品第一综合不卡播放| 日本亚洲国产一区二区三区| 国产成人免费全部网站 | 久久国产亚洲精品无码| 亚洲人成人一区二区三区| 亚洲AⅤ无码一区二区三区在线| 免费观看四虎精品成人| 亚洲粉嫩美白在线| 国产免费观看a大片的网站|