Form表单提交参数类型与后台实体参数类型的问题
在SpringMVC+Hibernate+Spring的框架下,Jsp页⾯的Form表单提交数据
1.肯定是以 key=val 的形式进⾏提交到后台
2.提交的key的类型是根据你的在Jsp页⾯标签的类型⽽定的
a.如果是⽤的
JSP:Form 表单的代码
<input type="text" id="showPicNum" name="showPicNum" maxlength="4"/>
后台ctrl层代码:
@RequestMapping("/addAdspace")
public String addAdspace(@ModelAttribute AdspaceInfo adspace) throws Exception {
adspaceService.addAdspace(adspace);
return "redirect:/adspace/getAllAdspace";
}
接收参数的AdspaceInfo类中的属性代码:
private byte showPicNum;
那么默认提交到后台的key 的类型就是String,⽽后接收的属性必须是String类型的才能接收,⽽你⽤来接受参数值的属性类型为Byte类型,相当于要将String类型的强转位byte类型的,在不知道具体传过来的参数是什么的时候,这个时候服务器⼀般不会做这种强转,报HTTP Status 400(BAD REQUEST) 的错误。
b.如果是⽤的
<select name="showPicNum">
<option value="1">1
parameter数据类型<option value="2">2
<option value="3">3
</select>
这个标签提交的,那么默认提交到后来的key的类型就是int。后台接收的属性可以使int,long,byte,String类型的。
---------------------------------------
如果
<select name="showPicNum">
<option value="a">1
<option value="b">2
<option value="c">3
</select>
这个时候后天接收的参数就必须是String类型的了,否则也会报HTTP Status 400 的错误。因为服务器不能把 String类型的a b c 解析为数字类型的。所以会报错。
所以⼀般在ssh框架的项⽬中,⼀般的数据流程都是 前台页⾯---> ctrl层 ----> service层,dao层---> 数据库。数据由前台页⾯传递到ctrl 层的流程中,⼀般会多写⼀个vo类,vo类
⾥⾯存放要从前台接收的属性,⼀般属性的类型根据前台传递的属性定,不⼀定跟实体的属性的类型⼀致。如果真的要将前台传递过来的数据保存到数据库的时候,就可以在
service层,将封装在vo类⾥的数据通过getter⽅法取出数据在转换成相应的类型通过实体的setter⽅法封装到实体中,最后在保存到数据中。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论