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参数类型 如果 ...
随机推荐
- Win7桌面底部的任务栏高度的修改
Win7桌面底部的任务栏高度的修改.. ----------win7中,任务栏比较宽,有些用户的电脑分辨率比较低,就显得非常占地方,这时可将任务设置成窄模式,图标小图标.鼠标移动到状态上,点击右键.- ...
- 谈谈培训机构的"骗局"给新人一些建议
前言 本文只谈"骗局",不谈其他,绝不引战,如有错误,希望指出我会及时改正,想要讨论的可以在留言区写下你的观点和经历. 为什么要写这篇文章呢,近些年培训这个话题也比较火,很多在看这 ...
- spring boot / cloud (六) 开启CORS跨域访问
spring boot / cloud (六) 开启CORS跨域访问 前言 什么是CORS? Cross-origin resource sharing(跨域资源共享),是一个W3C标准,它允许你向一 ...
- .net 中常用的正则表达式整理
相信很多伙伴都跟我一样有关于正则表达式的爱和恨,怎么说呢? 因为正则表达式规则繁多且复杂,想一个一个学 全部精通,需要耗费很长时间和精力, 但是我们用的地方并不是很多,所以我觉得这类东西需要做成类似工 ...
- Django编写RESTful API(五):添加超链接提高模型间的关联性
前言 在第四篇中,加入了用户模型,以及相关的认证和权限的功能.但是我们在使用的时候,会发现在访问http://127.0.0.1:8000/users/时看到的用户列表,不能够直接点击某个链接然后查看 ...
- NOIP[2015] Day2题解
问题 A: 跳石头 时间限制: 1 Sec 内存限制: 128 MB 题目描述 一年一度的"跳石头"比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石. ...
- html复选框
1.添加复选框 <input type="checkbox" id="yc" name="yc" value="year&q ...
- Servlet和JSP生命周期概述
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt374 Servlet生命周期分为三个阶段: 1,初始化阶段 调用init( ...
- [自制操作系统] 原子操作&核间中断&读写锁&PRWLock
本文主要为读论文Scalable Read-mostly Synchronization Using Passive Reader-Writer Locks的记录. 并将其在JOS上实现.其中包括la ...
- C# 文件的上传和下载
本文主要介绍一下,在APS.NET中文件的简单上传于下载,上传是将文件上传到服务器的指定目录下,下载是从存入数据库中的路径,从服务器上下载. 1.上传文件 (1)页面代码 <table alig ...