Spring表单标签: <fr:from/> 渲染表单元素 <fr:input/>输入框组件 <fr:password/>密码框组件标签 <fr:hidden/>隐藏框组件标签0 <fr:textarea/>多行输入框组件标签 <fr:radiobutton/>单选框组件标签 <fr:checkbox/>复选框组件标签 <fr:select/>下拉列表组件标签 <fr:error/>显示表单数据校验所对应的错误信息 数据校验: JSR 303是java为Bean数据合法性检验所提供的标准框架。JSR 303通过在Bean属性上标注类似于@NotNull,@Max等标准的注解指定校验规则,并通过标准的验证接口对Bean进行验证。 JSR 303约束 @Null 被注解的元素必须为空 @NotNull 被注解的元素必须不为空 @AssertTrue 被注解的元素必须为true @AssertFalse 被注解的元素必须为false @Min(value) 被注解的元素必须有一个数字,其值必须大于等于指定的最小值 @Max(value) 被注解的元素必须有一个数字,其值必须小于等于指定的最大值 @DecimalMin(value) 被注解的元素必须有一个数字,其值必须大于等于指定的最小值 @DecimalMax(value) 被注解的元素必须有一个数字,其值必须小于等于指定的最大值 @Size(max,min) 被注解的元素的大小必须在指定的范围内 @Digits(integer,fraction) 被注解的元素必须是一个数字,其值必须在可接受的范围内 @Past 被注解的元素必须是一个过去的日期 @Future 被注解的元素必须是一个将来的日期 @Pattern(value) 被注解的元素必须符合指定的正则表达式 Spring MVC支持JSR 303标准的校验框架,Spring的DataBinder在进行数据绑定时,可用时调用校验框架来完成数据校验工作,非常方便简洁。在Spring MVC中,可以直接通过注解驱动的方式来进行数据校验。 在User.java中需要做验证的属性上标注校验注解后,下一步就需要在Controller中使用注解所声明的限制规定来进行数据的校验,由于<mvc:annotation-driven/>会默认装配好一个LocalValidatorFactoryBean,通过在Controller的处理方法的入参上标注@Valid注解即可让SpringMVC在完成数据绑定之后,执行数据校验的工作。 注意:@Valid注解标示的参数后面,必须紧挨着一个BindingResult参数,否则Spring会在校验不通过时直接抛出异常。
数据校验实例:
<!--后台数据验证--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>4.0.1.GA </version> </dependency> <!--jboss logging--> <dependency> <groupId>org.jboss.logging</groupId> <artifactId>jboss-logging</artifactId> <version>3.3.0.Final</version> </dependency> <!--validation api--> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.0.0.GA </version> </dependency> <!--slf4j api--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.21</version> </dependency> 2. 配验证器:LocalvalidatorFactoryBean类 属性:HibernateValidator <!--配置包扫描器--> <!--配置包扫描器--> <context:component-scan base-package="cn.Hibernate"></context:component-scan> <bean id="myValidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property> </bean> <!--mvc注解驱动--> <mvc:annotation-driven validator="myValidator"></mvc:annotation-driven> 3. 实体类打标记: public class UserInfo { @Min(value =0,message = "成绩最小值为{value}") @Max(value = 100,message = "最大成绩值为{value}") private Integer score; @NotEmpty(message = "手机号不允许为空") @Pattern(regexp = "^1[3456789]\\d{9}$",message = "手机号不正确") private String phone; @NotEmpty(message = "用户名不能为空") @Size(min = 3,message = "名字至少3个字符") private String name; 4. Controller @Controller public class CollerHiber { @RequestMapping("/first") public ModelAndView doFirst(@Valid UserInfo info, BindingResult bindingResult) { ModelAndView mv = new ModelAndView(); mv.setViewName("/index.jsp"); int errCount = bindingResult.getErrorCount(); if (errCount > 0) { //证明模型试验失败 FieldError score = bindingResult.getFieldError("score"); FieldError name = bindingResult.getFieldError("name"); FieldError phone = bindingResult.getFieldError("phone"); if (score != null) { mv.addObject("scoremsg", score.getDefaultMessage()); } if (name != null) { mv.addObject("namemsg", name.getDefaultMessage()); } if (phone != null) { mv.addObject("phonemsg", phone.getDefaultMessage()); } mv.setViewName("/Hiber.jsp"); } return mv; } }创建一个页面,用来实现代码的展示:
当校验都输入正确之后就会跳转到下一个页面,如图所示:
单文件上传
单文件上传: MultipartResolver 用于处理上传请求,将上传请求包装成可以直接获取文件的数据,从而方便操作,他的两个实现类:StanderdServletMultipartResover和CommonsMultipartResolver. *StanderdServletMultipartResover:使用了servlet3.0标准的上传方式。 *CommonsMultipartResolver:使用了Apache的commons-fileupload来完成具体的上传操作。 使用CommonsMultipartResolver来完成上传,具体步骤如下: 1.导入jar文件 需要使用Apache Commons FileUpload组件,因此要在工程中导入commons-io-2.4jar,commons-fileupload-1.2.2jar. 2.配置MultipartResolver 首先使用CommonsMultipartResolver配置一个MultipartResolver解析器,关键实例如: //配置MultipartResolver,用于上传文件,使用spring的commonsMultipartResolver <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="50000"/> <property name="defaultEncoding" value="UTF-8"/> </bean> *defaultEncoding:请求的编码格式,默认为ISO-8859-1,此处设置为UTF-8(defaultEncoding必须和JSP的pageEncoding设置一致,以便正常读取表单内容) *maxUploadSize:上传文件大小上限,单位为字节。 实现文件上传的流程:Spring MVC会将上传文件绑定到MultipartFile对象中,MultipartFile提供了上传文件内容,文件名等。最后通过其transferTo()方法将文件存储到服务器上。 (1)MultipartFile对象作为控制器处理方法的入参(@RequeestParam(value="idPicPath",required=false)MultipartFilevattach),从MultipartFile对象中,可以获取上传文件的相关信息,其提供的方法如: getBytes() : byte[] getContentType() :String getInputStream() :InputStream getName() :String getOriginalFilename() :String getSize() :long isEmpty() :boolean transferTo(File) :void (2)在处理方法中,首先通过MultipartFile对象是否为空来判断是否有上传的文件。若不为空,在进行上传处理,否则直接进行其他数据字段的常规保存。 if(!attach.isEmpty()){ //...上传操作 } //调用userService.add(user)方法保存新增数据 (3)*定义上传目标路径,关键实例如: String path=request.getSession().getServletcontext().getRealPath("statice"+File.separator+"uploadfiles"); *获取原文件名,关键代码如下: String oldFileName=attache.getOriginalFilename(); *获取原文件后缀并进行判断: String prefix=FilenameUtils.getExtension(oldFileName); *获取原文件大小,并与规定的上传大小进行比较,若超过规定大小。 int filesize=500000; if(attach.getSize()>filesize){ requset.setAttribute("uploadFileError","*上传文件大小不得超过500KB"); return "useradd"; }
单文件上传实例:
首先导入架包:
<!--文件上传的jar包--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>1.4</version> </dependency> 大配置: <!--配置包扫描器--> <context:component-scan base-package="cn.Fileuplode"></context:component-scan> <!--配置文件上传的专用类--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean> <mvc:annotation-driven/> Controller: @Controller public class FileController { @RequestMapping("/first") public String doFirst(MultipartFile upload, HttpSession session){ /*获取到用户上的文件名称*/ String chile=upload.getOriginalFilename(); //文件短名称 /*将相对路径转化成绝对路径*/ String parpath=session.getServletContext().getRealPath("/uplode"); /*将file写入指定路径*/ File filepath=new File(parpath,chile); try { upload.transferTo(filepath); return "/Fileuplode.jsp"; } catch (IOException e) { e.printStackTrace(); return "/list.jsp"; } } } 创建一个上传文件的页面: <h1>文件上传</h1> <form action="/first" method="post" enctype="multipart/form-data"> 文件 <input type="file" name="upload"/> <input type="submit"/> </form>运行结果: 提交查询内容之后,还是会返回当前页面,想要查看是否又被上传成功,可以去target下的moven中你要上传的位置去查看,就可以看到你刚刚上传的图片或者文档,例如: