SpringMVC-Controller
接上:
- Controller层是控制层,在其类上添加@Controller注解,会被Spring-servlet.xml中的<context:component-scan>扫描识别;
- 在类上添加@RequestMapping,表示定义了命名空间,e.g.@RequestMapping("/spitter"),'/spitter'表示访问到此类,但具体到哪个方法,还需追加方法上的RequestMapping的参数;
- 方法上的@RequestMapping还有一个参数,RequestMethod,与页面有关,一般表单数据使用POST方法,在<form>的参数method定义:<form method="post" action="...">;
- 本例中,register的GET方法,代表了最简单的交互,返回的registerForm与Spring-servlet.xml的前后缀组成/WEB-INF/views/registerForm.jsp,表示访问指定路径的jsp页面;
- 通过命名空间和访问方法就可以定位具体的方法,在SpringMVC中,在与页面交互执行一系列操作时,难免要传递参数,提交注册页面时,需要将各个单参数包装成Spitter,此时需要在页面上添加
<jsp:useBean id="spitter" class="com.spring.mvc.pojo.Spitter" scope="request" ></jsp:useBean>
来进行自动封装,在Controller中,只需要在方法参数中声明Spitter ***即可;
- Controller中另外一个比较重要的参数是Model,它可以用来封装数据,只是现在的model不允许缺省参数名,否则会报错;
- SpringMVC支持REST风格,在参数前添加@PathVariable,在@RequestMapping中用{}包裹原参数;
- SpringMVC支持JSR303校验框架,在Controller的需要校验方法参数前添加@Valid注解,它位于javax.validation.Valid类中,同时需要添加Error或BindingResult类型参数,并且要紧跟在待验证参数的后面,jsp页面中input标签应采用SpringForm标签,并且使用errors标签通过path参数将错误信息与对应的参数绑定,当校验不通过时,errors会显示错误信息;
- 错误信息需要在POJO中通过注解表示
@NotNull
@Size(max=20,min=4,message="长度必须在4-20个字符之间")
private String firstName;SpringMVC数据验证
- 若不喜欢硬编码,则可以将验证信息写在classpath目录下的ValidationMessages.properties
Controller:
package com.spring.mvc.controller; import java.util.ArrayList;
import java.util.List;
import java.util.Locale; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
//import org.springframework.validation.BindingResult;
import org.springframework.validation.Errors;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.i18n.CookieLocaleResolver; import com.spring.mvc.dao.impl.SpitterDaoImpl;
import com.spring.mvc.pojo.Spitter; @Controller
@RequestMapping("/spitter")
public class SpitterController { @Autowired
private SpitterDaoImpl spitterDaoImpl;
/**
* 前往注册页面
* @return
*/
@RequestMapping(value="/register",method=RequestMethod.GET)
public String register(){
return "registerForm";
}
/**
* 实现添加功能,完成后跳转至个人信息
* @param s
* @param mv
* @return
*/
@RequestMapping(value="/register",method=RequestMethod.POST)
public String register(@Valid Spitter spitter,Errors errors){
if(errors.hasErrors()){
//取得所有验证未通过的error,遍历打印
List<ObjectError> list=new ArrayList<ObjectError>();
list=errors.getAllErrors();
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getDefaultMessage());
}
System.out.println(spitter);
System.out.println("属性验证未通过");
return "registerForm";
}
spitterDaoImpl.add(spitter);
return "redirect:/spitter/"+spitter.getUsername();
}
/**
* 获取个人信息
* @param username
* @param model
* @return
*/
@RequestMapping(value="/{name}",method=RequestMethod.GET)
public String showSpitterProfile(@PathVariable("name") String username,Model model){
Spitter s=spitterDaoImpl.findByUsername(username);
System.out.println("传入的参数为:"+username);
System.out.println(s);
model.addAttribute("spitter",s);
return "profile";
}
public SpitterDaoImpl getSpitterDaoImpl() {
return spitterDaoImpl;
}
public void setSpitterDaoImpl(SpitterDaoImpl spitterDaoImpl) {
this.spitterDaoImpl = spitterDaoImpl;
}
}
registerForm.jsp:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf"%>
<%@ page session="false" %>
<%
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id="spitte" class="com.spring.mvc.pojo.Spitter" scope="request" ></jsp:useBean>
<html>
<head>
<title>Spitter</title>
<link rel="stylesheet" type="text/css"
href="<c:url value="/resources/style.css" />" >
</head>
<body>
<h1>Register</h1> <sf:form method="POST" modelAttribute="spitte">
First Name: <sf:input type="text" path="firstName" /><sf:errors path="firstName" cssClass="errors"/><br/>
Last Name: <sf:input type="text" path="lastName" /><sf:errors path="lastName" cssClass="errors"/><br/>
Email: <sf:input type="email" path="email" /><sf:errors path="email" cssClass="errors"/><br/>
Username: <sf:input type="text" path="username" /><sf:errors path="username" cssClass="errors"/><br/>
Password: <sf:input type="password" path="password" /><sf:errors path="password" cssClass="errors"/><br/>
<input type="submit" value="Register" />
</sf:form>
</body>
</html>
SpringMVC-Controller的更多相关文章
- [转]SpringMVC Controller介绍及常用注解
一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Mo ...
- SpringMVC Controller介绍
SpringMVC Controller 介绍 一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理 ...
- SpringMVC Controller 介绍
一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Mo ...
- springmvc controller junit 测试
第一次搭建SSM框架,整合SpringMVC完成后进行Controller测试,找资料并解决问题. 下图是我的完整目录: 1 建立UserController类 代码清单 1-1:UserContro ...
- SpringMVC Controller介绍(转)
SpringMVC Controller 介绍 一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理 ...
- SpringMVC Controller详解
SpringMVC Controller 介绍 一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理 ...
- SpringMVC Controller接收参数总结
本文中Controller的开发环境如下表格所示,Maven对应POM配置如下代码段所示: 系统/工具 版本号OS Windows 7 Home BasicJava 1.7.0_79Eclipse M ...
- SpringMVC Controller 返回值几种类型
SpringMVC Controller 返回值几种类型 2016年06月21日 19:31:14 为who而生 阅读数:4189 标签: Controller 返回值类型spring mvc 更多 ...
- SpringMVC Controller单例和多例
对于SpringMVC Controller单例和多例,下面举了个例子说明下. 第一次:类是多例,一个普通属性和一个静态属性. 结果:普通属性:0.............静态属性:0 普通属性:0. ...
- SpringMVC Controller介绍及常见注解
一.简介 在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model,然后再把该Model返 ...
随机推荐
- 笔试面试1 用C实现C库函数itoa, atoi
要求用C实现C库函数itoa或者是atoi.也就是字符串和数字的相互转换. 事实上这是一个很easy的问题. 可是有次笔试我没有理解好题意,也没有想到事实上这就是一个怎样将数字以字符串的方式存放. 这 ...
- C#用正则表达式一键Unicode转UTF8(解决LitJson中文问题)
txt = Regex.Unescape(txt);
- IP分片
物理网络层一般要限制每次发送数据帧的最大长度.任何时候IP层接受到一份要发送的IP数据报时,它要判断向本地哪个接口发送数据(选路),并查询该接口获得其MTU(最大传输单元:Maximum Transm ...
- 怎么查看eclipse是否支持maven
打开eclipse,选择Windows->Preferences 查看Preferences下是否有Maven即可
- ubuntu 14.04英文环境设置成中文
适用于ubuntu 14.04英文版的系统,其它版本的设置应该是大同小异的. 进入ubuntu系统,在顶部齿状标志找到system... 2.在personal找到Language Support 3 ...
- 每日英语:Some Chinese Students Stay Home to Get Ahead
Li Shan's oldest son was the perfect candidate to join the throngs of Chinese students studying abro ...
- JNDI到底是什么,有什么作用
http://shitou521.iteye.com/blog/696006 ******************************************* JNDI的一篇文章 前端时间总是在 ...
- 队列——PowerShell版
继续读啊哈磊<啊哈!算法>感悟系列——队列 地铁售票处排队,先来的人先到队首先买完先走,后来的人排在队尾等候后买完后走. 想买票,必须排在队尾:买完票,只能从队首离开. 这种先进先出(Fi ...
- Android开发日记(三)
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV ...
- VBA学习笔记(3)--文件夹操作
说明(2017.3.22): 1. 根据兰色幻想VBA80集视频教学,总结 2. 大部分可以用自带函数处理,不过复制文件夹需要用到FileSystemObject对象,打开文件夹用到shell Pub ...