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返 ...
随机推荐
- 基于FPGA的5寸LCD显示屏的显示控制
基于FPGA的5寸LCD显示屏的显示控制 作者:lee神 1,图像处理基础知识 数字图像处理是指将图像信号转换成数字信号并利用计算机对其进行处理的过程.图像处理最早出现于 20 世纪 50 年代,当时 ...
- 基于PCIe的高速接口设计
基于PCIe的高速接口设计 由 judyzhong 于 星期四, 03/03/2016 - 13:49 发表 作者:李晓宁,姚远程,秦明伟 2016年微型机与应用第1期 摘要:PCIe总线是第三代I/ ...
- AAA含义图解
来源: <FreeRADIUS Beginner's Guide> 这本书 1,认证 2,授权 3,审计
- linux下使用shell脚本自动化部署项目
在Java开发项目时经常要把正在开发的项目发布到测试服务器中去测试,一般的话是要把项目先打成war包,然后把war包发布到服务器中,关闭服务器, 最后重新启动服务器,虽然这过程不是很繁琐,但如果是多个 ...
- nginx检查报错 error while loading shared libraries: libprofiler.so.0: cannot open shared object file: No such file or directory
在centos7.3上编译安装nginx-1.12.2 启动测试出错 [root@web02 local]# /usr/local/nginx/sbin/nginx -t /usr/local/ngi ...
- ny49 开心的小明
开心的小明 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他 ...
- UTF8字符串在lua的截取和字数统计【转载】
转载自:GitHub:pangliang/pangliang.github.com 需求 按字面个数来截取 函数(字符串, 开始位置, 截取长度) utf8sub(,) = 好1世界哈 utf8sub ...
- Activiti初学者教程 (zhuan)
http://blog.csdn.NET/bluejoe2000/article/details/39521405 ****************************************** ...
- linux 基本配置tab键和显示行号 和中文输入法
一.仅设置当前用户的Tab键宽度 输入命令:vim ~/.vimrc 然后:set tabstop=4 //我这里将Tab键的宽度设置为4 保存:ctrl+z+z(或:wq!) OK! 二.设置所 ...
- iphone 6plus 下app里的状态栏和界面会被放大的问题//以及设置APP闪屏页/APP图标流程
//设置APP闪屏页/APP图标流程如下 2.6Plus界面显示变大以及APP图标变大是由于上面图片的AppIcon以及LaunchImage造成的,主要是由于找不到对应的3x图片,或者改3x图片尺寸 ...