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的更多相关文章

  1. SpringMVC-02 第一个SpringMVC程序

    SpringMVC-02 第一个SpringMVC程序 第一个SpringMVC程序 配置版 新建一个Moudle , springmvc-02-hello,确定依赖导入进去了 1.配置web.xml ...

  2. SpringMVC02静态资源的访问

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  3. springmvc02,使用注解

    unit04_01 a.RequestMappingHandlerMapping组件 @RequestMapping("/login.do") 该标记用在Controller业务方 ...

  4. SpringMVC02 AbstractController And MultiActionController

    1.AbstractController 若处理器继承自AbstractController类,那么该控制器就具有了一些新功能.因为AbstractControll类还继承自一个父类WebConten ...

  5. springmvc-02(配置版与注解版区别)

    首先,我们来看配置版和注解版的相同步骤: 1.新建一个Moudle , springmvc-02-hello , 添加web的支持! 2.确定导入了SpringMVC 的依赖! 3.配置web.xml ...

  6. SpringMVC-02

    一.SSM整合[重点] 1 SSM整合配置 问题导入 请描述"SSM整合流程"中各个配置类的作用? 1.1 SSM整合流程 创建工程 SSM整合 Spring SpringConf ...

  7. spring mvc 快速入门

    ---------- 转自尚学堂 高淇 --------- Spring  MVC 背景介绍 Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC ...

  8. SpringMVC学习(二)

    SpringMVC入门(注解方式) 需求 实现商品查询列表功能. 第一步:创建Web项目 springmvc02 第二步:导入jar包 第三步:配置前端控制器 在WEB-INF\web.xml中配置前 ...

  9. Spring MVC 学习总结(三)——请求处理方法Action详解

    Spring MVC中每个控制器中可以定义多个请求处理方法,我们把这种请求处理方法简称为Action,每个请求处理方法可以有多个不同的参数,以及一个多种类型的返回结果. 一.Action参数类型 如果 ...

随机推荐

  1. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(三)RTSP命令解析

    一.RTSP命令简述 RTSP是用来控制实时流媒体“播放”.“暂停”.“停止”.“录像”等行为的传输协议.该协议规定了一系列命令以及这些命令的发送格式,RTSP客户端可以通过发送这些指定的命令,从而控 ...

  2. innerHTML innerText的使用和区别

    document对象中有innerHTML.innerText这两个属性,都是获取document对象文本内容,但使用起来还是有区别的: 1) innerHTML设置或获取标签所包含的HTML+文本信 ...

  3. python版mapreduce题目实现寻找共同好友

    看到一篇不知道是好好玩还是好玩玩童鞋的博客,发现一道好玩的mapreduce题目,地址http://www.cnblogs.com/songhaowan/p/7239578.html 如图 由于自己太 ...

  4. zoj3778 Talented Chef

    As we all know, Coach Gao is a talented chef, because he is able to cook M dishes in the same time. ...

  5. JavaPOI处理Excel

     java处理excel,心得分享如下,如有不妥或者需要补充的地方,敬请指出,欢迎随时交流 1.加载excel,获得workbook对象 fileTemp = new File(pathOfMExce ...

  6. 为什么Java字符串是不可变对象?

    转自 http://developer.51cto.com/art/201503/468905.htm 本文主要来介绍一下Java中的不可变对象,以及Java中String类的不可变性,那么为什么Ja ...

  7. django框架(Model)

    -------------------使用MySql数据库-------------------1.进行对应mysql-python包的下载 pip install mysql-python 2.在m ...

  8. Spring《错误集合,总结更新》

    1.这几天配置springmvc 使用注解,并且自动扫描注解,当我单个配置,不用自动扫描,出现下面错误,找了很多人跟我看,配置也没问题,但是就是显示不出东西,所说的类也去看了,没有问题 這是我的模拟数 ...

  9. poj 2455 二分+最大流

    这个因为点少用邻接矩阵做的. 题意:求由1到n的t条不重复路径中最大边权值的最小值. 思路:先对边权进行排序,然后二分边权值,建图求从1到n的最大流,当最大流为t时便求出答案. 代码: #includ ...

  10. 【Java IO流】字节流和字符流详解

    字节流和字符流 对于文件必然有读和写的操作,读和写就对应了输入和输出流,流又分成字节和字符流. 1.从对文件的操作来讲,有读和写的操作——也就是输入和输出. 2.从流的流向来讲,有输入和输出之分. 3 ...