Form表单提交参数类型与后台实体参数类型的问题

来源:互联网 发布:icmo是tcp的哪个端口 编辑:程序博客网 时间:2024/06/01 07:42

在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<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方法封装到实体中,最后在保存到数据中。

0 0
原创粉丝点击