Maison  >  Article  >  Java  >  Série d'apprentissage SpringMVC (4) Liaison de données-1

Série d'apprentissage SpringMVC (4) Liaison de données-1

黄舟
黄舟original
2017-03-03 10:52:081463parcourir

Dans la série (Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1), nous avons présenté comment une requête est mappée à une action. L'étape suivante est bien sûr de savoir comment obtenir les données de la requête, ce qui mène au contenu de cet article - la liaison de données.

Tout d'abord, jetons un coup d'œil aux annotations pour lier les données :

Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1.@RequestParam, lie les données d'une seule requête, qui peuvent être des données dans l'URL, des données soumises par le formulaire ou fichier téléchargé ;
Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1.@PathVariable, lier la valeur de la variable du modèle d'URL ;
Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1.@CookieValue, lier les données du cookie
Série dapprentissage SpringMVC (4) Liaison de données-1.@RequestHeader, lier les données d'en-tête de la demande ; lier les données au modèle ;
6.@SessionAttributes, lier les données à la session
7.@RequestBody, utilisé pour traiter le contenu dont le type de contenu n'est pas application/x-www-form-urlencoded, par exemple application/. json, application/xml, etc. ;
8.@RequestPart, lie les données "multipart/data" et peut saisir la conversion d'objet en fonction du type de données

Voyons comment l'utiliser ci-dessous :

Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1.@RequestParam :

Afin de vérifier la liaison du fichier, nous devons d'abord procéder comme suit :

a. Mettez commons-fileupload-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1.Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1.Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1.jar et commons-io- Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1.Série dapprentissage SpringMVC (4) Liaison de données-1.jar Deux packages jar ont été ajoutés à notre projet.

b. Configurez le fichier springservlet-config.xml dans notre projet pour prendre en charge le téléchargement de fichiers :


<!-- 支持上传文件 -->  <bean>  
    <!-- 设置上传文件的最大尺寸为Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1MB -->  
    <property>  
        <value>Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-10Série dapprentissage SpringMVC (4) Liaison de données-18576</value>  
    </property>
    <property> 
        <value>UTF-8</value> 
    </property></bean>


Parmi eux,

maxUploadSize

est utilisé pour limiter la taille maximale des fichiers téléchargés. Il peut également être laissé non défini, ce qui signifie qu'il n'y a aucune limite à la taille des fichiers téléchargés. defaultEncoding est utilisé pour définir le format d'encodage des fichiers téléchargés et est utilisé pour résoudre le problème des noms chinois tronqués des fichiers téléchargés. Voyons comment l'utiliser :

Ajoutez un DataBindController, qui possède Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1 actions paramBind correspondant respectivement aux requêtes get et post :

package com.demo.web.controllers;import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller;import org.springframework.web.bind.ServletRequestUtils;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping(value = "/databind")public class DataBindController {

    @RequestMapping(value="/parambind", method = {RequestMethod.GET})    public ModelAndView paramBind(){
        
        ModelAndView modelAndView = new ModelAndView();  
        modelAndView.setViewName("parambind");  
        return modelAndView;
    }
    
    @RequestMapping(value="/parambind", method = {RequestMethod.POST})    public ModelAndView paramBind(HttpServletRequest request, @RequestParam("urlParam") String urlParam, @RequestParam("formParam") String formParam, @RequestParam("formFile") MultipartFile formFile){        
        //如果不用注解自动绑定,我们还可以像下面一样手动获取数据
         String urlParamSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1 = ServletRequestUtils.getStringParameter(request, "urlParam", null);
        String formParamSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1 = ServletRequestUtils.getStringParameter(request, "formParam", null);
        MultipartFile formFileSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1 = ((MultipartHttpServletRequest) request).getFile("formFile"); 
        
        ModelAndView modelAndView = new ModelAndView();  
        modelAndView.addObject("urlParam", urlParam);  
        modelAndView.addObject("formParam", formParam);  
        modelAndView.addObject("formFileName", formFile.getOriginalFilename());  
        
        modelAndView.addObject("urlParamSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1", urlParamSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1);  
        modelAndView.addObject("formParamSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1", formParamSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1);  
        modelAndView.addObject("formFileNameSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1", formFileSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1.getOriginalFilename());  
        modelAndView.setViewName("parambindresult");  
        return modelAndView;
    }
        
}


Ajoutez deux vues, paraambind.jsp et paraambindresult.jsp, dans le dossier des vues :


nbsp;html PUBLIC "-//WSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1C//DTD HTML Série dapprentissage SpringMVC (4) Liaison de données-1.0Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1 Transitional//EN" "http://www.wSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1.org/TR/htmlSérie dapprentissage SpringMVC (4) Liaison de données-1/loose.dtd"><meta><title>Insert title here</title>
    
          
          
             
  


nbsp;html PUBLIC "-//WSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1C//DTD HTML Série dapprentissage SpringMVC (4) Liaison de données-1.0Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1 Transitional//EN" "http://www.wSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1.org/TR/htmlSérie dapprentissage SpringMVC (4) Liaison de données-1/loose.dtd"><meta><title>Insert title here</title>
    自动绑定数据:

    ${urlParam}
    ${formParam}
    ${formFileName}



    手动获取数据:

    ${urlParamSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1}
    ${formParamSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1}
    ${formFileNameSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1}

Exécutez le projet, saisissez le contenu et choisissez de télécharger le fichier :

Envoyez pour voir le résultats : Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1

Vous pouvez voir que les données liées ont été obtenues. Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1

Ci-dessus, nous avons montré comment lier des données à une seule variable, mais dans les applications réelles, nous avons généralement besoin d'obtenir l'objet modèle, nous n'avons pas besoin de lier les données à des variables individuelles, puis de comparer. Lorsque vous attribuez une valeur à un modèle, il vous suffit d'ajouter le modèle aux paramètres d'action correspondants (il n'est pas nécessaire de spécifier ici des annotations pour lier les données). Spring MVC convertira automatiquement les données et les liera à l'objet du modèle. . Tout est aussi simple que ça. Le test est le suivant :

添加一个AccountModel类作为测试的model:


package com.demo.web.models;public class AccountModel {    
    private String username;    private String password;    
    public void setUsername(String username){        this.username=username;
    }    public void setPassword(String password){        this.password=password;
    }    
    public String getUsername(){        return this.username;
    }    public String getPassword(){        return this.password;
    }
}

在DataBindController里面添加Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1个modelAutoBind的action分别对应get和post请求:


@RequestMapping(value="/modelautobind", method = {RequestMethod.GET})public String modelAutoBind(HttpServletRequest request, Model model){
    
    model.addAttribute("accountmodel", new AccountModel());    return "modelautobind";
}

@RequestMapping(value="/modelautobind", method = {RequestMethod.POST})public String modelAutoBind(HttpServletRequest request, Model model, AccountModel accountModel){
    
    model.addAttribute("accountmodel", accountModel);    return "modelautobindresult";
}


在views文件夹中添加modelautobind.jsp和modelautobindresult.jsp Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1个视图用于提交数据和展示提交的数据:

modelautobind.jsp:

nbsp;html PUBLIC "-//WSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1C//DTD HTML Série dapprentissage SpringMVC (4) Liaison de données-1.0Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1 Transitional//EN" "http://www.wSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1.org/TR/htmlSérie dapprentissage SpringMVC (4) Liaison de données-1/loose.dtd"><meta><title>Insert title here</title>
    
              用户名:
        密 码:
             
  

modelautobindresult.jsp :

nbsp;html PUBLIC "-//WSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1C//DTD HTML Série dapprentissage SpringMVC (4) Liaison de données-1.0Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1 Transitional//EN" "http://www.wSérie dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1.org/TR/htmlSérie dapprentissage SpringMVC (4) Liaison de données-1/loose.dtd"><meta><title>Insert title here</title>
    用户名:${accountmodel.username}
    密 码:${accountmodel.password}


运行测试:

Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1

用户名 输入AAA 密码 输入BBB,提交:

Série dapprentissage SpringMVC (4) Liaison de données-1

可以看到结果显示正确,说明自动绑定成功。

注:

Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1.关于@RequestParam的参数,这是一个@RequestParam的完整写法@RequestParam(value="username", required=true, defaultValue="AAA")。

value表示要绑定请求中参数的名字;

required表示请求中是否必须有这个参数,默认为true这是如果请求中没有要绑定的参数则返回Série dapprentissage SpringMVC (4) Liaison de données-10Série dapprentissage SpringMVC (4) Liaison de données-1;

defaultValue表示如果请求中指定的参数值为空时的默认值;

要绑定的参数如果是值类型必须要有值否则抛异常,如果是引用类型则默认为null(Boolean除外,默认为false);

 

Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1.在刚才添加的Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1个action中可以看到返回类型和以前的不一样了由ModelAndView变成了String,这是由于Spring MVC 提供Model、ModelMap、Map让我们可以直接添加渲染视图需要的模型数据,在返回时直接指定对应视图名称就可以了。同时Map是继承于ModelMap的,而Model和ModelMap是继承于ExtendedModelMap的。

 

Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1. Dans la vue modelautobind.jsp qui vient d'être ajoutée, vous pouvez voir form:form, form:input Balises d'attente, ce sont les balises de formulaire fournies par Spring MVC. Avec l'aide de ces balises, nous pouvons facilement lier les données du modèle au formulaire (bien sûr, vous pouvez également choisir de continuer à utiliser les balises de formulaire HTML natives). Pour utiliser Spring MVC ajoute simplement une référence à la vue @ préfixe taglib="formulaire "uri="http://www.php.cn/" %> suffit, à propos du printemps Le contenu spécifique des balises de formulaire MVC sera présenté dans les prochains articles.

Ce qui précède est le contenu de Data Binding-Série dapprentissage SpringMVC (Série dapprentissage SpringMVC (4) Liaison de données-1) Liaison de données-1 de SpringMVC Learning Series (Série dapprentissage SpringMVC (4) Liaison de données-1). Pour plus de contenu connexe, veuillez faire attention au PHP. Site Web chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn