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返 ...
随机推荐
- linux下man手册简介
Linux提供了丰富的帮助手册,当你需要查看某个命令的参数时不必到处上网查找,只要man一下即可.Linux 的man手册共有以下几个章节: 1.Standard commands (标准命令)2.S ...
- Base64转码和解码的帮助类
/** * 将字符串进行Base64编码 * * @param s 被编码的字符串 * @return 编码后的字符串 */ public static String encoderBASE64(St ...
- pgrep -f 和pkill -f
pgrep -f abc 匹配出含abc的进程 并输出进程的pid pkill -f abc 杀掉含abc的所有进程
- postgresql MVCC详解
postgresql MVCC详解 1.postgresql隐藏列 1)tableoid 表对象唯一标识符 2)xmin 插入操作的事务标识符 3)xmax 删除操作的事务标识符 4)cmin 插入操 ...
- css实现遮罩层(解决透明背景上的文字不透明)
.PopUp_layer{ position:fixed; top: 0; left: 0; right:0; bottom:0; width:100%; height:1 ...
- C#中模拟用户登陆SharePoint网站
自动化测试一个SharePoint网站,首先要登陆,我们今天就模拟一下用户登陆SharePoint网站的过程,这一过程可以通过其他方式完成模拟,比如通过Coded UI Test录制脚本会更方便,但是 ...
- Wpf border 容易弄混的两个属性
代码如下: <Border Margin=" > <Button Content="dafkafjk"></Button> </ ...
- hive 定时加载分区
#!/bin/bash #每天定时位外部表加载分区 #服务器当天的时间 #加载环境变量 source /etc/profile; #如果没有指定日期用当前日期如果指定的日期使用指定的日期 echo ' ...
- Linux 下 tail 命令
简述 tail命令从指定点开始将文件写到标准输出,使用tail命令的“-f”选项可以方便的查阅正在改变的日志文件,“tail -f filename”会把filename里最尾部的内容显示在屏幕上,并 ...
- 如何在WebService中重载方法
1. 本来在WebService中这样写的重载方法,如下所示: [WebService(Namespace = "http://tempuri.org/")] [WebSer ...