<div class="content" id="articleContent"> <div class="ad-wrap"> <p style="margin:0 0 10px 0;"><a data-traceid="blog_detail_above_text_link_1" data-tracepid="blog_detail_above_text_link" style="color:#A00;font-weight:bold;" href="http://clickc.admaster.com.cn/c/a109734,b2619652,c3159,i0,m101,8a1,8b2,h" target="_blank">华为云4核8G,高性能云服务器,免费试用 >>> </a> <img src="https://www.oschina.net/img/hot3.png" align="absmiddle" style="max-height: 32px; max-width: 32px;"></p> </div> <p>SpringMVC 多个对象的相同字段参数传递解决方案,在SpringMVC中,有时须要传递多个对象(除了Model和web元素)</p> <p>众所周知,在SpringMVC中不支持相似struts2的点语法传参法则,所以多个对象同名参数传递势必会形成必定的问题。</p> <p><br></p> <ol> <li><p>SpringMVC的参数传递很是智能,可自动装配参数到对象</p></li> </ol> <pre><code><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">User</span>{ <span class="hljs-keyword">private</span> String name; <span class="hljs-keyword">private</span> String id; <span class="hljs-keyword">private</span> String gender, <span class="hljs-keyword">private</span> String age; <span class="hljs-comment">//getter 和setter</span> } ---------------------------------- <span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">Food</span>{ <span class="hljs-keyword">private</span> String name; <span class="hljs-keyword">private</span> String id; <span class="hljs-keyword">private</span> String price, <span class="hljs-keyword">private</span> String date; <span class="hljs-comment">//getter 和setter</span> } ------- <form method=<span class="hljs-string">'post'</span> action=<span class="hljs-string">'url'</span>> 用户名 <input type=<span class="hljs-string">'text'</span> name=<span class="hljs-string">'name'</span>> 用户id <input type=<span class="hljs-string">'text'</span> name=<span class="hljs-string">'id'</span>> 食品名 <input type=<span class="hljs-string">'text'</span> name=<span class="hljs-string">'name'</span>> 食品id <input type=<span class="hljs-string">'text'</span> name=<span class="hljs-string">'id'</span>> <input type=<span class="hljs-string">'text'</span> name=<span class="hljs-string">'gender'</span>> <input type=<span class="hljs-string">'text'</span> name=<span class="hljs-string">'age'</span>> <input type=<span class="hljs-string">'text'</span> name=<span class="hljs-string">'price'</span>> <input type=<span class="hljs-string">'text'</span> name=<span class="hljs-string">'date'</span>> </form>javascript
@requestMap(<span class="hljs-keyword">value</span>={<span class="hljs-string">'/order/book'</span>}) <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">string</span> <span class="hljs-title">show</span>(<span class="hljs-params">User u,Food f</span>)</span>{}</code></pre>java
<p>在上述状况下User 和food都不能获得正确的name和id,或者说更本得不到,这要是struts2就方便多了,直接使用点语法 u.name,u.id,f.name,f.id....</p> <p><br></p> <p>为了解决上述问题,有2中方案:</p> <p><br></p> <span id="OSC_h4_1"></span> <h4 id="h4_1"><strong>1.是创建一个DTO</strong></h4> <p>优势是能够认为的避免参数的传递,直接改dto的字段名 u_name,u_id,f_name,f_id,gender,age,date,price都要列出来,而后做以下操做</p> <p>而后修改表单字段和contoller</p> <pre><code class="hljs xml"><span class="hljs-tag"><<span class="hljs-name">form</span> <span class="hljs-attr">method</span>=<span class="hljs-string">'post'</span> <span class="hljs-attr">action</span>=<span class="hljs-string">'url'</span>></span> 用户名 <span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">'text'</span> <span class="hljs-attr">name</span>=<span class="hljs-string">'u_name'</span>></span> 用户id <span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">'text'</span> <span class="hljs-attr">name</span>=<span class="hljs-string">'u_id'</span>></span> 食品名 <span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">'text'</span> <span class="hljs-attr">name</span>=<span class="hljs-string">'f_name'</span>></span> 食品id <span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">'text'</span> <span class="hljs-attr">name</span>=<span class="hljs-string">'f_id'</span>></span> <span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">'text'</span> <span class="hljs-attr">name</span>=<span class="hljs-string">'gender'</span>></span> <span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">'text'</span> <span class="hljs-attr">name</span>=<span class="hljs-string">'age'</span>></span> <span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">'text'</span> <span class="hljs-attr">name</span>=<span class="hljs-string">'price'</span>></span> <span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">'text'</span> <span class="hljs-attr">name</span>=<span class="hljs-string">'date'</span>></span> <span class="hljs-tag"></<span class="hljs-name">form</span>></span>web
@requestMap(value={'/order/book'}) public string show(UserFoodDto dto){ //而后拆分,将字段 User u = new User(); Food f = new Food();spring
u.setName(dto.getUname()); f.setName(dto.getname());segmentfault
u.setUid(dto.getUid()); f.setFid(dto.getFid());服务器
u.setAge(dto.getAge); f.setPrice(dto.getPrice); ..... }</code></pre>mvc
<p>缺点是:若是数据量大,100百个字段,修改的地方天然越多,并且一个dto,拆分也很费力,所以不建议使用在数据量大的状况下</p> <p><br></p> <span id="OSC_h4_2"></span> <h4 id="h4_2"><span style="color: rgb(89, 89, 89);"><strong>2.<span style="color: rgb(0, 176, 80);">使用桥链接,将不一样的部分专门封装成一个对象</span></strong></span><strong>(<span style="color: rgb(255, 0, 0);">推荐</span>)</strong></h4> <p>优势:减小了冲突,减小了工做量</p> <p>缺点:冲突字段/总字段趋近于1时显得不必(不过,这种状况几乎不多出现,除非是继承关系,但继承关系彻底可使用子类来传值,因此这个问题你就当没遇到过)</p> <p><br></p> <p>表单以下</p> <pre ><code class="hljs xml"><span class="hljs-tag"><<span class="hljs-name">form</span> <span class="hljs-attr">method</span>=<span class="hljs-string">'post'</span> <span class="hljs-attr">action</span>=<span class="hljs-string">'url'</span>></span> 用户名 <span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">'text'</span> <span class="hljs-attr">name</span>=<span class="hljs-string">'u_name'</span>></span> 用户id <span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">'text'</span> <span class="hljs-attr">name</span>=<span class="hljs-string">'u_id'</span>></span> 食品名 <span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">'text'</span> <span class="hljs-attr">name</span>=<span class="hljs-string">'f_name'</span>></span> 食品id <span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">'text'</span> <span class="hljs-attr">name</span>=<span class="hljs-string">'f_id'</span>></span> <span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">'text'</span> <span class="hljs-attr">name</span>=<span class="hljs-string">'gender'</span>></span> <span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">'text'</span> <span class="hljs-attr">name</span>=<span class="hljs-string">'age'</span>></span> <span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">'text'</span> <span class="hljs-attr">name</span>=<span class="hljs-string">'price'</span>></span> <span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">'text'</span> <span class="hljs-attr">name</span>=<span class="hljs-string">'date'</span>></span> <span class="hljs-tag"></<span class="hljs-name">form</span>></span>app
@requestMap(value={'/order/book'}) public string show(User u,Food f,UFBridge ufb){async
u.setName(ufb.getUname()); f.setName(ufb.getUname()); u.setId(ufb.getUid); f.setId(ufb.getFid); }</code></pre>post
<p><br></p> <span id="OSC_h4_3"></span> <h4 id="h4_3">3.使用相应的注解@InitBinder,能够作出相似struts2的方案(不推荐,代码量增长,灵活度不够)</h4> <p>以下博文</p> <p><a href="http://segmentfault.com/a/1190000002923372" target="_blank" rel="nofollow">SpringMVC同名参数绑定问题</a><br></p> <p><a href="http://www.tuicool.com/articles/rE3YJn" target="_blank" rel="nofollow">springmvc注解形式的开发参数接收</a><br></p> <p><br></p> <p>try doing it</p> <div class="ad-wrap"> <div data-traceid="blog_down_1" data-tracepid="blog_down" style="text-align:center"> <!-- oschina-blog-728x90 --> <ins class="adsbygoogle" style="display:inline-block;width:728px;height:90px" data-ad-client="ca-pub-7090564139599510" data-ad-slot="5590362768"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <script type="text/javascript"> function googleAdJSAtOnload() { var element = document.createElement("script"); element.src = "//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"; element.async = true; document.body.appendChild(element); } if (window.addEventListener) { window.addEventListener("load", googleAdJSAtOnload, false); } else if (window.attachEvent) { window.attachEvent("onload", googleAdJSAtOnload); } else { window.onload = googleAdJSAtOnload; } </script> </div> </div> </div>