Heim  >  Artikel  >  Java  >  SpringMVC-Lernreihe (5) Datenbindung-2

SpringMVC-Lernreihe (5) Datenbindung-2

黄舟
黄舟Original
2017-03-03 10:54:541456Durchsuche

In Serie (SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2) haben wir vorgestellt, wie man @RequestParam zum Binden von Daten verwendet. Schauen wir uns an, wie man andere Datenbindungsanmerkungen verwendet.

SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.@PathVariable wird zum Binden von URL-Vorlagenvariablenwerten verwendet. Wir haben bereits in Serie (SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2) vorgestellt, wie man dies verwendet, und werden hier nicht näher darauf eingehen.

SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.@CookieValue wird verwendet, um Daten in Cookie zu binden. Unten verwenden wir die Session-ID im Cookie zum Testen:

Cookiebind-Aktion in DataBindController hinzufügen, der Code lautet wie folgt:

//@CookieValue Test@RequestMapping(value="/cookiebind", method = {RequestMethod.GET})public String cookieBind(HttpServletRequest request, Model model, @CookieValue(value="JSESSIONID", defaultValue="") String jsessionId){
    
    model.addAttribute("jsessionId", jsessionId);    return "cookiebindresult";
}


Fügen Sie es hinzu Der Ansichtenordner Eine cookiebindresult.jsp-Ansicht, der Code lautet wie folgt:

nbsp;html PUBLIC "-//WSpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2C//DTD HTML SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.0SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2 Transitional//EN" "http://www.wSpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.org/TR/htmlSpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2/loose.dtd"><meta><title>Insert title here</title>
    ${jsessionId}


Führen Sie den Test aus:

SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2

Sie können sehen, dass die Sitzungs-ID erreicht wurde.

Hinweis: @CookieValue hat auch SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2 Parameter wie @RequestParam und seine Bedeutung ist dieselbe wie der @RequestParam-Parameter.

SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.@RequestHeader wird verwendet, um die Daten im Anforderungsheader zu binden. Wir verwenden @RequestHeader, um den User-Agent zur Demonstration abzurufen:

Requestheaderbind-Aktion in DataBindController hinzufügen, der Code lautet wie folgt folgt:

//@RequestHeader Test@RequestMapping(value="/requestheaderbind", method = {RequestMethod.GET})public String requestHeaderBind(HttpServletRequest request, Model model, @RequestHeader(value="User-Agent", defaultValue="") String userAgent){
    
    model.addAttribute("userAgent", userAgent);    return "requestheaderbindresult";
}


Fügen Sie eine requestheaderbindresult.jsp-Ansicht im Ansichtenordner hinzu. Der Code lautet wie folgt:

nbsp;html PUBLIC "-//WSpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2C//DTD HTML SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.0SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2 Transitional//EN" "http://www.wSpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.org/TR/htmlSpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2/loose.dtd"><meta><title>Insert title here</title>
    ${userAgent}


Führen Sie den Test aus:

SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2

Sie können sehen, dass der User-Agent erhalten wurde.

Hinweis: @RequestHeader hat auch SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2 Parameter wie @RequestParam und seine Bedeutung ist dieselbe wie der @RequestParam-Parameter.

SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.@ModelAttribute bindet Daten an das Modell. In der modelAutoBind-Aktion der Serie (SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2) lautet der Code zum Hinzufügen der vom Formular übermittelten Daten zum Modell wie folgt:

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

Mit Hilfe von @ModelAttribute können wir Sprechen Sie einfacher über Daten. Fügen Sie sie dem Modell hinzu und ändern Sie den obigen Code wie folgt:

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

Führen Sie den Test aus:

SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2

Sie können sehen, dass es immer noch erfolgreich ist. Die übermittelten Daten sind gebunden.

SpringMVC-Lernreihe (5) Datenbindung-2. Der Datenumfang im Modell ist auf Anfrageebene, was bedeutet, dass in einer Anfrageanfrage die von anderen Anfrageanfragen angeforderten Daten des Modells nicht abgerufen werden können. Wir können jedoch @SessionAttributes verwenden, um Daten in der Sitzung zu speichern und Daten zwischen mehreren Anforderungen zu verwalten, sodass wir Anforderungen wie das Senden von Formularen schrittweise umsetzen können. Sehen wir uns an, wie man Daten in zwei Schritten an AccountModel bindet:

在DataBindController上添加:

@SessionAttributes(value = "sessionaccountmodel")

在DataBindController添加usernamebind和passwordbind action,代码如下:

//@SessionAttributes Test@ModelAttribute("sessionaccountmodel")public AccountModel initAccountModel(){    
    return new AccountModel();
}

@RequestMapping(value="/usernamebind", method = {RequestMethod.GET})public String userNameBind( Model model, AccountModel accountModel){
    
    model.addAttribute("sessionaccountmodel", new AccountModel());    return "usernamebind";
}

@RequestMapping(value="/usernamebind", method = {RequestMethod.POST})public String userNameBindPost( @ModelAttribute("sessionaccountmodel") AccountModel accountModel){    
    //重定向到密码绑定测试
    return "redirect:passwordbind";
}

@RequestMapping(value="/passwordbind", method = {RequestMethod.GET})public String passwordBind(@ModelAttribute("sessionaccountmodel") AccountModel accountModel){    
    return "passwordbind";
}

@RequestMapping(value="/passwordbind", method = {RequestMethod.POST})public String passwordBindPost(@ModelAttribute("sessionaccountmodel") AccountModel accountModel, SessionStatus status){    
    //销毁@SessionAttributes存储的对象    status.setComplete();    //显示绑定结果
    return "sessionmodelbindresult";
}


由于我们在controller上指定了@SessionAttributes,所以在@ModelAttribute(“xxx”)注解的参数会直接在@SessionAttributes中查找名为”xxx”的对象,如果没有找到则调用@ModelAttribute(“xxx”)注解的方法返回对象并存入@SessionAttributes(如果没有找到且没有@ModelAttribute(“xxx”)注解的方法就会抛出HttpSessionRequiredException)。当执行到最后一步就可以调用SessionStatus .setComplete()方法把@SessionAttributes中保存对象销毁了(不会清除HttpSession中的数据)。

在views文件夹中添加usernamebind.jsp、passwordbind.jsp和sessionmodelbindresult.jsp视图内容分别如下:

nbsp;html PUBLIC "-//WSpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2C//DTD HTML SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.0SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2 Transitional//EN" "http://www.wSpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.org/TR/htmlSpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2/loose.dtd"><meta><title>Insert title here</title>
    <form>     
        用户名:<input><br>
        <input>
    </form>  


nbsp;html PUBLIC "-//WSpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2C//DTD HTML SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.0SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2 Transitional//EN" "http://www.wSpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.org/TR/htmlSpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2/loose.dtd"><meta><title>Insert title here</title>
    <form>     
        密 码:<password></password><br>
        <input>
    </form>  


nbsp;html PUBLIC "-//WSpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2C//DTD HTML SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.0SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2 Transitional//EN" "http://www.wSpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.org/TR/htmlSpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2/loose.dtd"><meta><title>Insert title here</title>
    用户名:${sessionaccountmodel.username}<br>
    密 码:${sessionaccountmodel.password}


运行测试:

SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2

SpringMVC-Lernreihe (5) Datenbindung-2

SpringMVC-Lernreihe (5) Datenbindung-2

可以看到我们已经成功的分SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2步把数据绑定到AccountModel中了。

注:

@SessionAttributes有value和types两个参数其中value指明要对象的名称,types指定要绑定对象的类型,如@SessionAttributes(value = "sessionaccountmodel", types=AccountModel.class)两者是and关系,需要同时满足。也可以同时指定多个value和types 如:@SessionAttributes(value = {"aa", "aa"} , types={XXX.class, YYY.class}) 。

SpringMVC-Lernreihe (5) Datenbindung-2.@RequestBody 调用合适的MessageConvert来把非application/x-www-form-urlencoded请求中的内容转换为指定的对象它通常与@ResponseBody合用,@ResponseBody与.@RequestBody刚好相反,他把指定的对象转换为合适的内容(请求头为Accept:application/json 则返回json数据)并返回。这里我们用一个ajax请求做演示:

由于Spring默认解析json用的是Jackson,所以我们这里要把jackson-core-asl-SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.9.SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.jar和jackson-mapper-asl-SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.9.SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.jar两个包添加到我们项目。

修改AccountModel让其继承Serializable接口,并添加一个空的构造函数(为了Jackson做转换)。

在DataBindController添加requestBodyBindaction,代码如下:

//@RequestBody Test@RequestMapping(value="/requestbodybind", method = {RequestMethod.GET})public String requestBodyBind(Model model){
    
    model.addAttribute("accountmodel", new AccountModel());    return "requestbodybind";
}

@RequestMapping(value="/requestbodybind", method = {RequestMethod.POST})public @ResponseBody AccountModel requestBodyBind(@RequestBody AccountModel accountModel){            
    return accountModel;
}


在views文件夹中添加requestbodybind.jsp视图内容如下:

nbsp;html PUBLIC "-//WSpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2C//DTD HTML SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.0SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2 Transitional//EN" "http://www.wSpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.org/TR/htmlSpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2/loose.dtd"><script datenbindung-2 datenbindung-springmvc-lernreihe datenbindung-2.8.springmvc-lernreihe></script><meta><title>Insert title here</title>
    <form>     
        用户名:<input><br>
        密 码:<password></password><br>
        <input>
    </form> 
    
    <script>
        $(function() { 
            $("#submit").click(function() {   
                var postdata = &#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;{"username":"&#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29; + $(&#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;#username&#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;).val() + &#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;","password":"&#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29; + $(&#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;#password&#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;).val() + &#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;"}&#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;;   
                $.ajax({  
                    type : &#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;POST&#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;,  
                    contentType : &#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;application/json&#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;,  
                    url : &#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;http://www.php.cn/:8080/SpringMVCLesson/databind/requestbodybind&#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;,  
                    processData : false,  
                    dataType : &#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;json&#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;,  
                    data : postdata,  
                    success : function(data) {  
                        alert(&#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;username : &#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;+data.username+&#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;\npassword : &#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;+data.password);  
                    },  
                    error : function() {  
                        alert(&#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;error...&#SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-29;);  
                    }  
                }); 
            });
        });    </script> 


运行测试:

SpringMVC-Lernreihe (5) Datenbindung-2

Das Ergebnis ist korrekt und beweist, dass die Konvertierung erfolgreich war.

SpringMVC-Lernreihe (5) Datenbindung-2.@RequestPart bindet Daten vom Typ „multipart/form-data“, unterstützt das Hochladen von javax.servlet.http.Part-Dateien und kann eine Typkonvertierung durchführen. Weitere Informationen finden Sie in der offiziellen Dokumentation:

http://docs.spring.io/spring-framework/docs/SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.x/spring-framework-reference/htmlsingle/#new-in-SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2.SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2-mvc-requestpart

Das Obige ist das SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Der Inhalt von Data Binding-SpringMVC-Lernreihe (SpringMVC-Lernreihe (5) Datenbindung-2) Datenbindung-2. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn