点击链接查询原文
http://www.xdemo.org/springmvc-data-bind/
已经使用SpringMVC开发了几个项目,平时也有不少朋友问我数据怎么传输,怎么绑定之类的话题,今天做一个总结。在此之前,大家可以看一下我之前的一篇关于Spring restful的文章http://www.xdemo.org/spring-restful/。
项目下载:http://pan.baidu.com/share/link?shareid=955245807&uk=1896630845
首先贴出Controller的全部内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
|
这种方式支持get和post,参数可选
1 2 3 4 5 6 7 8 9 10 |
|
访问方式简单的比如http://localhost:8080/springmvc-param/request/get0?p1=xxx。
这种方式支持get,参数必须
1 2 3 4 5 6 7 8 9 10 11 |
|
这种方式和第一种不同的是,指定了访问访问必须为GET,而且参数是必须的,可以通过如下方式访问这个地址:http://localhost:8080/springmvc-param/request/get1?p1=xxxx。
这种方式仅支持GET,参数可选
1 2 3 4 5 6 7 8 9 10 11 12 |
|
这个方法和第二种唯一不同的就是参数是可选的,其他没有不同。
这种方式仅支持GET,参数可选
1 2 3 4 5 6 7 8 9 10 11 12 |
|
ModelAndView表示绑定了数据的视图,可以通过EL表达式去取值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
先访问http://localhost:8080/springmvc-param/request/userForm这个方法,跳转到一个页面,并向浏览器写入Cookie,第二个方法访问的时候即可通过@CookieValue方式来取到Cookie中的值。
绑定数据到一个对象上,支持get和post
一个User,一个Phone,一个User拥有多个Phone,为了演示,User中有一个List和Array的Phone的集合
1 2 3 4 5 6 7 8 |
|
1 2 3 |
|
Controller方法如下
1 2 3 4 5 6 7 8 9 10 |
|
HTML表单如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
一对多的时候,使用多一方的在一一方的对象中的属性名,加上数组下标,即phones[0].brand,phones[1].brand即可绑定到User的phones属性上,这种方法的局限性就是要求下标是正确的,否则会无法绑定,不是很方便,但是也有其适用场景。
下面这种方法就是比较方便了,仅支持post,但是必须要在消息转换器中配置JSON解析器
1 |
|
并注册到RequestMappingHandlerAdapter的messageConverters中。
Controller如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Javascript如下
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
该方法仅支持POST的方式,会使用到json2.js这个类库,注意设置contentType:"application/json"这个属性,否则会报415未知的类型异常。
传递简单的字符串数组,仅支持POST方式
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
和上面的方法类似,注意contentType:"application/json",否则同样的415错误。
下面的方法是restful中的路径变量,支持get,post,delete等,如:xxx/1,xxx/2这种方式,经测试,这个方法的奇葩之处在于"xxx/5,4"以及"xxx/[5,4]"的效果是一样的,看代码:
1 2 3 4 5 6 7 8 9 10 11 |
|
可以直接将后面的路径变量,转换成相应的数组。可以在浏览器输入:http://localhost:8080/springmvc-param/request/array/5,4,3,2,1或者http://localhost:8080/springmvc-param/request/array/[5,4,3,2,1],都可以转换成数组。
如果一个表单对应多个实体类,恰好这些类中具有相同的属性,这时候SpringMVC就犯难了,我们要做的是让SpringMVC明白我们在给谁赋值。
支持post,get,put
如下,A,B,C,其中C中包含了A和B两个成员变量
1 2 3 |
|
1 2 3 |
|
1 2 3 4 |
|
Controller如下
1 2 3 4 5 6 7 8 9 10 11 |
|
HTML如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
通过object.property即可指定给谁赋值。
另外一个是关于Session取值的
代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
在Controller上加上注解@SessionAttributes(value="user"),再使用ModelMap的put方法(非addAttribute方法),然后在getUser方法中,使用@ModelAttribute("user")即可取得session中的user对象
Maven依赖:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
Spring配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
|
转载请注明来源:http://www.xdemo.org/springmvc-data-bind/