ホームページ >Java >&#&チュートリアル >SpringMVC学習シリーズ(4) データバインディング-1

SpringMVC学習シリーズ(4) データバインディング-1

黄舟
黄舟オリジナル
2017-03-03 10:52:081511ブラウズ

シリーズ (SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1) では、リクエストがアクションにマッピングされる方法を紹介しました。次のステップはもちろんリクエスト内のデータを取得する方法であり、これがこの記事の内容であるデータ バインディングにつながります。

まず、データをバインドするためのアノテーションを見てみましょう:

SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1.@RequestParam は、URL 内のデータ、フォームまたはアップロードされたファイルによって送信されたデータである単一のリクエスト データをバインドします。 .@PathVariable、バインド URL テンプレート変数値を決定します。
SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1.@CookieValue、Cookie データをバインドします。
5.@ModelAttribute、データをモデルにバインドします。データをセッションにバインドします。
7.@RequestBody、Content-Type が application/x-www-form-urlencoded ではないコンテンツ (application/json、application/xml など) を処理するために使用されます。 "multipart/ data" データをバインドし、データ型に従ってオブジェクトに変換できます

使用方法を見てみましょう:

SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1.@RequestParam:

ファイルのバインドを確認するには、次のことを行う必要があります。まず次の作業を行います:

a. commons を置く - SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1 つの jar パッケージ、fileupload-SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1.SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1.SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1.jar と commons-io-SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1.SpringMVC学習シリーズ(4) データバインディング-1.jar がプロジェクトに追加されました。

b. ファイルのアップロードをサポートするためにプロジェクトの springservlet-config.xml ファイルを設定します。内容は次のとおりです:

<!-- 支持上传文件 -->  <bean>  
    <!-- 设置上传文件的最大尺寸为SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1MB -->  
    <property>  
        <value>SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-10SpringMVC学習シリーズ(4) データバインディング-18576</value>  
    </property>
    <property> 
        <value>UTF-8</value> 
    </property></bean>


その中で、

maxUploadSize
はアップロードされるファイルの最大サイズを制限するために使用されます。または、設定を省略することもできます。これは、アップロードされるファイルのサイズに制限がないことを意味します。

defaultEncoding

は、アップロードされたファイルのエンコード形式を設定するために使用され、アップロードされたファイルの中国語名が文字化けする問題を解決するために使用されます。 使用方法を見てみましょう: DataBindController を追加します。これには、get リクエストと post リクエストにそれぞれ対応する SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1 つの paramBind アクションがあります:

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 urlParamSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1 = ServletRequestUtils.getStringParameter(request, "urlParam", null);
        String formParamSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1 = ServletRequestUtils.getStringParameter(request, "formParam", null);
        MultipartFile formFileSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1 = ((MultipartHttpServletRequest) request).getFile("formFile"); 
        
        ModelAndView modelAndView = new ModelAndView();  
        modelAndView.addObject("urlParam", urlParam);  
        modelAndView.addObject("formParam", formParam);  
        modelAndView.addObject("formFileName", formFile.getOriginalFilename());  
        
        modelAndView.addObject("urlParamSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1", urlParamSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1);  
        modelAndView.addObject("formParamSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1", formParamSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1);  
        modelAndView.addObject("formFileNameSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1", formFileSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1.getOriginalFilename());  
        modelAndView.setViewName("parambindresult");  
        return modelAndView;
    }
        
}

SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1 つの parabind.jsp と parabindresult.jsp をビュー フォルダーに追加します。内容は次のとおりです:


nbsp;html PUBLIC "-//WSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1C//DTD HTML SpringMVC学習シリーズ(4) データバインディング-1.0SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1 Transitional//EN" "http://www.wSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1.org/TR/htmlSpringMVC学習シリーズ(4) データバインディング-1/loose.dtd"><meta><title>Insert title here</title>
    
          
          
             
  


nbsp;html PUBLIC "-//WSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1C//DTD HTML SpringMVC学習シリーズ(4) データバインディング-1.0SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1 Transitional//EN" "http://www.wSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1.org/TR/htmlSpringMVC学習シリーズ(4) データバインディング-1/loose.dtd"><meta><title>Insert title here</title>
    自动绑定数据:

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



    手动获取数据:

    ${urlParamSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1}
    ${formParamSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1}
    ${formFileNameSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1}


プロジェクトを実行し、コンテンツを入力し、アップロードファイルを選択します:


送信して結果を表示します:

SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1

バインドされたデータを参照してください。すでに取得されています。

SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1 上記ではデータを SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1 つの変数にバインドする方法を説明しましたが、実際のアプリケーションでは通常、モデル オブジェクトを取得する必要があります。データを変数にバインドしてから値を割り当てる必要はありません。対応するアクション パラメーターをモデルに追加するだけです (ここでデータをバインドするためのアノテーションを指定する必要はありません)。Spring MVC はデータを自動的に変換し、それをモデル オブジェクトにバインドします。テストは次のとおりです:

添加一个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里面添加SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-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 SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1个视图用于提交数据和展示提交的数据:

modelautobind.jsp:

nbsp;html PUBLIC "-//WSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1C//DTD HTML SpringMVC学習シリーズ(4) データバインディング-1.0SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1 Transitional//EN" "http://www.wSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1.org/TR/htmlSpringMVC学習シリーズ(4) データバインディング-1/loose.dtd"><meta><title>Insert title here</title>
    
              用户名:
        密 码:
             
  

modelautobindresult.jsp :

nbsp;html PUBLIC "-//WSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1C//DTD HTML SpringMVC学習シリーズ(4) データバインディング-1.0SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1 Transitional//EN" "http://www.wSpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1.org/TR/htmlSpringMVC学習シリーズ(4) データバインディング-1/loose.dtd"><meta><title>Insert title here</title>
    用户名:${accountmodel.username}
    密 码:${accountmodel.password}


运行测试:

SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1

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

SpringMVC学習シリーズ(4) データバインディング-1

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

注:

SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1.关于@RequestParam的参数,这是一个@RequestParam的完整写法@RequestParam(value="username", required=true, defaultValue="AAA")。

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

required表示请求中是否必须有这个参数,默认为true这是如果请求中没有要绑定的参数则返回SpringMVC学習シリーズ(4) データバインディング-10SpringMVC学習シリーズ(4) データバインディング-1;

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

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

 

SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1.在刚才添加的SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1个action中可以看到返回类型和以前的不一样了由ModelAndView变成了String,这是由于Spring MVC 提供Model、ModelMap、Map让我们可以直接添加渲染视图需要的模型数据,在返回时直接指定对应视图名称就可以了。同时Map是继承于ModelMap的,而Model和ModelMap是继承于ExtendedModelMap的。

 

SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1. 追加したビューmodelautobind.jspには、form:formform:inputおよびその他のタグが表示されます。これらはSpring MVCによって提供されます。これらのタグの助けを借りて、Spring を使用して、モデル データをフォームに簡単にバインドできます (もちろん、ネイティブ HTML フォーム タグを引き続き使用することも選択できます)。 MVC の場合は、ビューへの参照を追加するだけです@ taglib prefix="form"uri="http://www.php .cn/ " %> 以上、春のこと MVC フォーム タグの具体的な内容については、今後の記事で紹介します。

上記は SpringMVC 学習シリーズ (SpringMVC学習シリーズ(4) データバインディング-1) のデータ バインディング-SpringMVC学習シリーズ(SpringMVC学習シリーズ(4) データバインディング-1) データバインディング-1 の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。