springmvc02
1,创建实体类对象User
注意要导入 bean-validator.jar 包
package com.yangw.springmvc.entity;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Range;
import org.springframework.format.annotation.NumberFormat;
import org.springframework.format.annotation.NumberFormat.Style;
/*** * 这里的这几个注解是用来验证字段的 */
public class User {
@NotEmpty(message="用户名不能为空")
private String name;
@Length(min=3 ,max=10,message="密码长度应该在3-10之间")
private String password;
@NumberFormat(style=Style.NUMBER)
@Range(min=1,max=100,message="年龄应该在1-100之间")
private int age;
public User() {
}
public User(String name, String password, int age) {
this.name = name;
this.password = password;
this.age = age;
}
/** *get set方法这里略去 */
}
/**
* Springmvc作服务器端验证更加简单
* 它支持 JSR303 ,JSR是sun公司专门为java来更新的每一个标准
* bean-validator.jar 是hibernate的jar包
*/
2,在UserController类中完成 User的添加,显示所有内容
package com.yangw.springmvc.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.yangw.springmvc.entity.User;
@Controller
@RequestMapping(value="/user")
public class UserController{
private Map<String,User> users = new HashMap<String,User>();
public UserController(){
users.put("yangw", new User("yangw","123456",24));
users.put("ganw", new User("ganw","123456",25));
users.put("wangw", new User("wangw","123456",27));
}
//只有get请求才处理
@RequestMapping(value="/users",method=RequestMethod.GET )
public String list(Model model){
model.addAttribute("users", users);
return "user/list";
}
// //链接到add页面时是GET请求,会访问这段代码
// @RequestMapping(value="/add",method=RequestMethod.GET )
// public String add(Model model){
// //这里需要提供一个User对象,因为添加的页面
// 第一种方式 model.addAttribute(new User());
// //直接返回到add页面
// return "user/add";
// }
//链接到add页面时是GET请求,会访问这段代码
@RequestMapping(value="/add",method=RequestMethod.GET )
public String add(@ModelAttribute(value="user") User user){
//第二种提供一个User对象的方式,因为添加的页面
return "user/add";
}
//链接到add页面时是POST请求,会访问这段代码
@RequestMapping(value="/add",method=RequestMethod.POST)
//这个User是一个要被验证的对象,使用@Validated说明;
//紧跟@Validated来写验证结果类,用BindingResult表示
public String add(@Validated User user,BindingResult br){
if(br.hasErrors()){//如果有错误,到add界面显示
return "user/add";
}
users.put(user.getName(), user);
return "redirect:/user/users";
}
}
3,list.jsp页面
注意加入标签库的jar包 jsf-api.jar jsf-impl.jar jstl-1.2.jar
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<a href="add">添加用户</a><br/>
<c:forEach items="${users }" var="um" >
<!-- 这里的um是一个个的 键值对 -->
${um.key}---${um.value.name }---${um.value.password }----${um.value.age } <br/>
</c:forEach>
</body>
</html>
4,add.jsp页面
用到了springmvc的form表单
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>添加用户</title>
</head>
<body>
<!-- 设置为post请求,并且会自动将表单中的值添加到user中 -->
<!-- 此时没有写action,直接提交会提交给/add -->
<sf:form method="post" modelAttribute="user">
<!-- sf:input path属性 中设置user对象的属性名 -->
<!--这个是服务器端验证 sf:errors 标签来输出 验证的错误信息 -->
username:<sf:input path="name"/> <sf:errors path="name"/><br/>
password:<sf:password path="password"/><sf:errors path="password"/><br/>
age:<sf:input path="age"/><sf:errors path="age"/><br/>
<input type="submit" value="提交" />
</sf:form>
</body>
</html>
5,web.xml增加编码过滤器
<filter>
<filter-name>characterEncoding</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>
</filter>
<filter-mapping>
<filter-name>characterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
6,显示一个用户详细信息
/**
* @PathVariable:路径中的变量
*
*/
@RequestMapping(value="/{name}",method=RequestMethod.GET)
public String show(@PathVariable String name,Model model){
model.addAttribute(users.get(name));
return "/user/show";
}
show.jsp页面
<body>
username:${user.name }<br/>
password:${user.password}<br/>
age:${user.age }
</body>
为list页面的增加超级链接
<c:forEach items="${users }" var="um" >
<!-- 这里的um是一个个的 键值对 -->
${um.key}---<a href="${um.value.name }">${um.value.name }</a>---${um.value.password }----${um.value.age } <br/>
</c:forEach>
7,用户的删除,更新
/**
* 修改用户,获取原始用户页面信息
*
*/
@RequestMapping(value="/{name}/update",method=RequestMethod.GET)
public String update(@PathVariable String name,Model model){
model.addAttribute(users.get(name));
return "/user/update";
}
/**
* 修改用户,对提交的数据进行更新操作
*
*/
@RequestMapping(value="/{name}/update",method=RequestMethod.POST)
public String update(@Validated User user,BindingResult br){
if(br.hasErrors()){//如果有错误,到add界面显示
return "user/update";
}
users.put(user.getName(), user);
return "redirect:/user/users";
}
/**
* 删除用户
*
*/
@RequestMapping(value="/{name}/delete",method=RequestMethod.GET)
public String delete(@PathVariable String name){
users.remove(name);
return "redirect:/user/users";
}
update.jsp 和 list.jsp
update.jsp页面 与add.jsp其实一样
<body>
<!-- 设置为post请求,并且会自动将表单中的值添加到user中 -->
<!-- 此时没有写action,直接提交会提交给/update -->
<sf:form method="post" modelAttribute="user">
username:<sf:input path="name"/> <sf:errors path="name"/><br/>
password:<sf:password path="password"/><sf:errors path="password"/><br/>
age:<sf:input path="age"/><sf:errors path="age"/><br/>
<input type="submit" value="提交" />
</sf:form>
</body>
<c:forEach items="${users }" var="um" >
<!-- 这里的um是一个个的 键值对 -->
${um.key}---<a href="${um.value.name }">${um.value.name }</a>---${um.value.password }----${um.value.age } ----
<a href="${um.value.name }/update">更新</a>---
<a href="${um.value.name }/delete">删除</a><br/>
</c:forEach>
springmvc02的更多相关文章
- SpringMVC-02 第一个SpringMVC程序
SpringMVC-02 第一个SpringMVC程序 第一个SpringMVC程序 配置版 新建一个Moudle , springmvc-02-hello,确定依赖导入进去了 1.配置web.xml ...
- SpringMVC02静态资源的访问
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- springmvc02,使用注解
unit04_01 a.RequestMappingHandlerMapping组件 @RequestMapping("/login.do") 该标记用在Controller业务方 ...
- SpringMVC02 AbstractController And MultiActionController
1.AbstractController 若处理器继承自AbstractController类,那么该控制器就具有了一些新功能.因为AbstractControll类还继承自一个父类WebConten ...
- springmvc-02(配置版与注解版区别)
首先,我们来看配置版和注解版的相同步骤: 1.新建一个Moudle , springmvc-02-hello , 添加web的支持! 2.确定导入了SpringMVC 的依赖! 3.配置web.xml ...
- SpringMVC-02
一.SSM整合[重点] 1 SSM整合配置 问题导入 请描述"SSM整合流程"中各个配置类的作用? 1.1 SSM整合流程 创建工程 SSM整合 Spring SpringConf ...
- spring mvc 快速入门
---------- 转自尚学堂 高淇 --------- Spring MVC 背景介绍 Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC ...
- SpringMVC学习(二)
SpringMVC入门(注解方式) 需求 实现商品查询列表功能. 第一步:创建Web项目 springmvc02 第二步:导入jar包 第三步:配置前端控制器 在WEB-INF\web.xml中配置前 ...
- Spring MVC 学习总结(三)——请求处理方法Action详解
Spring MVC中每个控制器中可以定义多个请求处理方法,我们把这种请求处理方法简称为Action,每个请求处理方法可以有多个不同的参数,以及一个多种类型的返回结果. 一.Action参数类型 如果 ...
随机推荐
- 采用OCR识别自动识别财务报表
一. 财务报表有什么作用 财务报表又叫会计报表,包含:资产负债表.损益表.现金流量表三表.财务报表对企业经营状况有重要的参考意义: n 全面系统地揭示企业一定时期的财务状况.经营成果 ...
- Jmeter录制脚本工具之chrome插件--BlazeMeter
前几天在我们的交流群,看到有童鞋问到BlazeMeter这个工具的用法,感觉还是一个比较不错的插件,比起我们大费周章的去安装badboy或者是使用Jmeter的代理服务器去录制脚本要容易多啦!大家有问 ...
- 关于sys.argv
sys.argv[]用来获取命令行参数,sys.argv[0]表示代码本身的文件路径.比如在命令行输入‘python test.py -version',sys.argv[0]的值即为test.py, ...
- js动态获取时间的方式
列子的时间是这样实现的."2017/7/25 下午10:27:11 星期二" 列子中有一个div用来放时间. 每隔1s执行一次函数,秒就会变. function showTime( ...
- 《物联网框架ServerSuperIO教程》- 22.动态数据接口增加缓存,提高数据输出到OPCServer和(实时)数据库的效率
22.1 概述及要解决的问题 设备驱动有DeviceDynamic接口,可以继承并增加新的实时数据属性,每次通讯完成后更新这些属性数据.原来是通过DeviceDynamic接口实体类反射的方式获 ...
- 关于Jaccard相似度在竞品分析中的一点思考
上个月对一个小项目的效果进行改进,时间紧,只有不到一周的时间,所以思考了一下就用了最简单的方法来做,跟大家分享一下(项目场景用的类似的场景) 项目场景:分析一个产品的竞品,譬如app的竞品.网站的竞品 ...
- IOS学习【前言】
2016-1-14 16年开始时导师安排任务,开始IOS学习之旅 经过几天的学习,感觉还是需要作比较多的学习笔记,因此开始用博客记录整个过程,方便以后查看学习与分享. 主要记录一些关键的问题处理方法 ...
- 10 Logistic Regression
线性分类中的是非题 --->概率题 (设置概率阈值后,大于等于该值的为O,小于改值的为X) --->逻辑回归 O为1,X为0 逻辑回归假设 逻辑函数/S型函数:光滑,单调 自变量趋于负无穷 ...
- Java设计模式之-------->"代理模式"
01.什么是代理模式? 解析:代理(Proxy):代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不想或者不能直接引用另一个对象, 而代理对象可以在客户端和目标 ...
- 软件工程(GZSD2015)第二次作业进度
贵州师范大学软件工程第二次作业 徐 镇 王铭霞 张 英 涂江枫 张 燕 安 坤 周 娟 杨明颢 杨家堂 罗文豪 娄秀盛 周 娟 李盼 岳庆 张颖 李丽思 邓婷 唐洁 郑倩 尚清丽 陈小丽 毛茸 宋光能 ...