SpringMVC表单标签/REST风格/文件上传

Spring表单标签

  1. 必须在JSP页面的开头处声明taglib指令.
<%@ taglib prefix="fm"  uri="http://www.springframework.org/tags/form" %>
  1. Spring常用表单标签
名称说明
<fm:form/>渲染表单元素
<fm:input/>输入框组件标签
<fm:password/>密码框组件标签
<fm:hidden/>隐藏框组件标签
<fm:textarea/>多行输入框组件标签
<fm:radiobutton/>单选框组件标签
<fm:checkbox/>复选框组件标签
<fm:select/>下拉列表组件标签
<fm:error/>显示表单数据校验所对应的错误信息
  1. <fm :form>标签属性
    • modelAttribute
      指定绑定的模型属性,默认为command
      建议指定
    • action
      指定表单提交的目标URL
      可不指定,则自动提交到获取表单页面的URL
    • method
      GET
      POST
  2. <fm:input/>标签属性
属性说明
path属性路径,表示表单对象属性,如userName、userCode等
cssClass表单组件对应的CSS样式类名
cssErrorClass当提交表单后报错(服务端错误),采用的CSS样式类
cssStyle表单组件对应的CSS样式
htmlEscape绑定的表单属性值是否要对HTML特殊字符进行转换,默认为true
  • 注:表单组件标签也拥有HTML标签的各种属性,比如:id、onclick等等,都可以根据需要,灵活使用
  1. 利用Spring自带的验证框架和JSR 303实现数据校验
  • 数据校验注解详解:
约束说明
@NotEmpty被注释的元素不能是null和 " ",可以判断null和 “”
@ NotNull被注释的元素必须不为null
@Null被注释的元素必须为null
@AssertTrue被注释的元素必须为 true
@AssertFalse被注释的元素必须为 false
@Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max, min)被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction)被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past被注释的元素必须是一个过去的日期
@Future被注释的元素必须是一个将来的日期
@DateTimeFormat(pattern = “”)日期时间格式
  1. 控制层和视图层

    • Controller
      使用注解所声明的限制规则来进行数据的校验
      处理方法的入参,标注@Valid注解和BindingResult参数

    • @Valid注解标示的参数后面,必须紧挨着一个BindingResult参数,否则Spring会在校验不通过时直接抛出异常

    • View
      将验证的错误信息显示在页面中,进行相应的信息提示
      使用fm:errors/标签在JSP页面显示错误信息

  2. 代码示例:

  • 导入jar文件

    • hibernate-validator-4.3.2.Final.jar
    • jboss-logging-3.1.0.CR2.jar
    • validation-api-1.0.0.GA.jar
  • 视图层 jsp/provideradd1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
<%@include file="/jsp/common/head.jsp"%>
<%@taglib prefix="fm" uri="http://www.springframework.org/tags/form" %>

	<div>
		<fm:form modelAttribute="provider" method="post">
        	供应商编码:<fm:input path="proCode" /><br>
            <fm:errors path="proCode" /><br>
            供应商名称:<fm:input path="proName"/><br>
            <fm:errors path="proName"/><br>
            联系人:<fm:input path="proContact"/><br>
            <fm:errors path="proContact"/><br>
            联系电话:<fm:input path="proPhone" id="proContact"/>
            <fm:errors path="proPhone"/><br><br>
	 <div>
  • 控制层
	@RequestMapping(value = "/addProvider" , method = RequestMethod.GET)
    public String addProvider(@ModelAttribute("provider") Provider provider) {
        return "jsp/provideradd1";
    }

    @RequestMapping(value = "/addProvider" , method = RequestMethod.POST)
    public String addProvider(@Valid Provider provider, BindingResult result , MultipartFile workPicPath , HttpServletRequest request , Model model) {

        if (result.hasErrors()){
            return "jsp/provideradd1";
        }
        provider.setCreatedBy(((User) request.getSession().getAttribute(Constants.USER_SESSION)).getId());
        provider.setCreationDate(new Date());
        boolean flag = false;
        flag = providerService.add(provider);
        if (flag) {
            return "redirect:query";
        } else {
            return "jsp/provideradd1";
        }
    }
  • 实体类
public class Provider {
	private Integer id;   //id
	@NotEmpty(message = "供应商名称不能为空")
	private String proName; //供应商名称
	@NotEmpty(message = "联系人不能为空")
	private String proContact; //供应商联系人

REST风格

  1. Representational State Transfer,表述性状态转移,是一种软件架构风格。
  2. 通俗来说就是隐藏参数结构,只显示值,不显示键。
  3. 示例:
/**
     * 正常情况下的访问链接
     * http://localhost:8081/chaoshidingdan/login/rest?id=33
     * REST风格、封装数据结构
     * http://localhost:8081/chaoshidingdan/login/rest/33
     * 
     * /rest/{id}:URL中的{xxx}占位符参数
     * @PathVariable String id :接收REST风格URL中的参数
     */
    @RequestMapping("/rest/{id}")
    public void testRest(@PathVariable String id , Model model){
        logger.info("==========================================");
        logger.info(id);
    }

文件上传

SpringMVC—文件上传
  • MultipartResolver接口
    • 用于处理上传请求,将上传请求包装成可以直接获取文件的数据,方便操作。
  • 两个实现类
    • StandardServletMultipartResolver
      • 使用了Servlet3.0标准的上传方式。
    • CommonsMultipartResolver
      • 使用了Apache的commons-fileupload来完成具体的上传操作。
步骤
  1. 导入jar文件
    • commons-io-2.4.jar
    • commons-fileupload-1.2.2.jar
  2. 配置MultipartResolver(springmvc-servlet.xml)
    • 使用CommonsMultipartResolver配置一个MultipartResolver解析器。
	<!--配置文件上传-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--设置文件上传大小限制和文件编码-->
        <property name="maxUploadSize" value="5000000"/>
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>
  1. 编写文件上传表单页

    • method=“POST”
    • enctype=“multipart/form-data”
      • 指定表单内容类型,支持文件上传
    • <input type=“file” name=“a_idPicPath”/>
      • 用来上传文件的file组件
  2. 编写控制器、处理上传的文件。

    • MultipartFile:Spring MVC会将上传文件绑定到MultipartFile对象中,并通过该对象完成文件的上传操作
      提供的方法。
    • File.separator:适应路径分隔符,低入侵性的代码实现。
@RequestMapping(value = "/addProvider" , method = RequestMethod.POST)
    public String addProvider(MultipartFile workPicPath , HttpServletRequest request , Model model) {

        // 判断文件是否为空
        if (workPicPath.isEmpty()){
            model.addAttribute("errorUploadImg" , "文件上传失败");
            return "";
        }
        // 路径和名称
        String path = request.getServletContext().getRealPath("images");
        String fileName = System.currentTimeMillis() + workPicPath.getOriginalFilename();

        File file = new File("F:" , fileName);
        try {
	        // 把上传的文件复制到file中
            workPicPath.transferTo(file);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
多文件上传思路
  1. 上传文件的组件名一致,以数组的形式传递给控制器的处理方法。
<label for="a_idPicPath">证件照:</label>
<input type="file" name="attachs" id="a_idPicPath"/>
<label for="a_workPicPath">工作证照片:</label>
<input type="file" name="attachs" id="a_workPicPath"/>
  1. 控制器-处理方法

    • 修改入参MultipartFile为数组:MultipartFile[] attachs
    • MultipartFile[] 数组内存放文件对象顺序:按照form表单的file标签的顺序进行存储。
    • 若入参对象MultipartFile为数组时,该参数前面必须要加上@RequestParam注解,否则会报错。
  2. 多文件上传也可采用单独入参。

  • jsp页面
<label for="a_idPicPath">证件照:</label>
<input type="file" name="a_idPicPath" id="a_idPicPath"/>
<label for="a_workPicPath">工作证照片:</label>
<input type="file" name=" a_workPicPath" id="a_workPicPath"/>
  • 后端控制器
public void add(@RequestParam(value="a_idPicPath",required=false) MultipartFile idPicFile ,
				@RequestParam(value="a_workPicPath",required=false) MultipartFile workPicFile)
)


SpringMVC实现单文件上传思路图解

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值