spring3.0 MVC笔记2--从spring2.0转向spring3.0

本文介绍如何使用Spring MVC进行表单显示与提交处理,包括数据验证、解决中文乱码及文件上传等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7、显示和提交form

显示,带上空数据
 @RequestMapping(method = RequestMethod.GET, params = "register")
 public String prepare(Model model) {
  Member m = new Member();
  model.addAttribute(m);
  return "member/edit";
 }


form用spring标签库的几个标签

<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>
<sf:form method="POST" modelAttribute="member">
用户名:<sf:input path="memberName"/>
密码:<sf:password path="password"/>
Email Address:<sf:input path="email"/>
<input type="submit"/>
</sf:form>

modelAttribute:数据
path:属性

8、处理form提交

 @RequestMapping(method = RequestMethod.POST)
 public String register(Member member,
   BindingResult bindingResult,
   ) {
  if (bindingResult.hasErrors()) {
   return "member/edit";
  }
  service.addMember(member);
  return "redirect:/member/"+member.getMemberName();
  }

URLEncoder.encode用来处理重定向时的中文问题

 

9、验证提交

<sf:form method="POST" modelAttribute="member">
用户名:<sf:input path="memberName"/>
<sf:errors path="memberName" cssClass="error" />
密码:<sf:password path="password"/>
<sf:errors path="password" cssClass="error" />
Email Address:<sf:input path="email"/>
<sf:errors path="email" cssClass="error" />
<input type="submit"/>
</sf:form>

控制器:
 public String register(@Valid Member member,
   BindingResult bindingResult,
   ) {...}

bean:
public class Member {
 
 @Size(min=3, max=20, message="Username must be between 3 and 20 characters long.")
 @Pattern(regexp="^[a-zA-Z0-9]+$",message="Username must be alphanumeric with no spaces")
 private String memberName;
 @Size(min=6, max=20,
   message="The password must be at least 6 characters long.")
 private String password;
...}


10、中文乱码问题解决

web.xml

 <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

11、文件上传

 <bean id="multipartResolver" class=
  "org.springframework.web.multipart.commons.CommonsMultipartResolver">
  <property name="maxUploadSize" value="500000"/>
 </bean>

<sf:form method="POST" modelAttribute="member" enctype="multipart/form-data">
<input name="image" type="file"/>
<input type="submit"/>

上传处理
 @RequestMapping(method = RequestMethod.POST)
 public String register(   @RequestParam(value = "image", required = false) MultipartFile image) {
  try {
   if (!image.isEmpty()) {
    validateImage(image);
    saveImage(member.getMemberName() + ".jpg", image); //
   }
  } catch (Exception e) {
   bindingResult.reject(e.getMessage());
   return "member/edit";
  }
  return "redirect:/member/"+member.getMemberName();
  }
 }

 private void validateImage(MultipartFile image) throws Exception {
  if (!image.getContentType().equals("image/pjpeg")) {
   throw new Exception("Only JPG images accepted");
  }
 }

 private void saveImage(String filename, MultipartFile image)
   throws Exception {
  try {
   File file = new File(webRootPath + "/resources/" + filename);
   FileUtils.writeByteArrayToFile(file, image.getBytes());
  } catch (IOException e) {
   throw new Exception("Unable to save image", e);
  }
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值