SpringMVC入门 (三) 简单用户管理实例一

1.首先创建一个User类:
	
public class User {
       private String username;
	
	private String password;
	
	private String nickname;
	
	private String email;
....
// 要加入有参构造函数和无参构造函数
}


2.创建UserController:
这里的一个重点就是, SpringMVC的Controller是单例模式的。
因此和DWR是有本质区别的 http://alleni123.iteye.com/admin/blogs/1984135
这个链接中的DWR实例我们使用了static来保持变量的一致性。
而在SpringMVC中就不需要那么做了,直接使用private map<Str,User>这样的变量就可以了。


@Controller
@RequestMapping("/user") //这里表示我们访问这个控制器的时候,首先要在地址栏加入/user,
public class UserController {
	
	private  Map<String,User> users=new HashMap<String,User>();
	
	public UserController(){
		users.put("alleni", new User("alleni","123","小兰子","[email protected]"));
		users.put("eline", new User("eline","123","小李子","[email protected]"));
		users.put("dou", new User("dou","123","小德子","[email protected]"));
		System.out.println("UserController()");
	}
	
	
	 //要访问这个方法,就要在url中输入/users
	@RequestMapping(value="/users",method=RequestMethod.GET) //method=RequestMethod.GET表示只有get请求才会被这个方法处理。
	public String list(Model model,HttpServletResponse res){
		res.setContextType("utf-8");
                model.addAttribute("users",users);
		return "user/list";  //这里表示路径WEB-INF/jsp/user/list.jsp, 也就是hello-servlet.xml中配置的prefix和suffix的值所表达的路径和后缀。
	}
	
}


在WEB-INF/jsp/user目录创建一个list.jsp文件,如下:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'list.jsp' starting page</title>
    
	 
  </head>
  
  <body>
	<!-- users对应model.addAttribute("users",users)的key值 -->
	<c:forEach items="${users}" var="um">
		   ${um.value.username}
		---${um.value.nickname}
		---${um.value.password}
		---${um.value.email}
	</c:forEach>
	
  </body>
</html>



以上是在视图中显示用户的方法。
接下来是如何通过表单添加用户。

3.添加用户

添加用户我们首先在Controller里面加入以下两个方法:
	//通过add路径,跳转到用户添加页面。当用户发送的是get请求,就会访问这里
	@RequestMapping(value="/add",method=RequestMethod.GET)
	public String add(Model model){
		
		//这里如果不放一个User对象到model里面,就会报错
		// Neither BindingResult nor plain target object for bean name 'user' available as request attribute
		//因为前台会根据modelAttribute="user">的user来获取User的getter和setter方法,才能进行数据添加。
		model.addAttribute(new User());
		return "user/add";  
	} 
	
	
	//在具体添加用户时,是POST请求,就访问这里。
	//form提交的时候就会post请求了。-->sf:form method="post" 
	@RequestMapping(value="/add",method=RequestMethod.POST)
	public String add(User user){   
		users.put(user.getUsername(), user);
		return "redirect:/user/users";  //redirect表示客户端跳转,也就是form被提交以后客户要跳转到的页面
		//注意: 这里是用户端跳转,因此参数必须是我们的控制器的地址路径。
		//这里并不是直接访问WEB-INF/下面的内容,而是访问我们控制器的RequestMapping的值所对应的方法内容,再由该方法访问WEB-INF下的页面。
	}


第一个方法用于跳转到用户添加页面,并通知SpringMVC我们所要添加的对象类型。
model.addAttribute(new User());

这里还有一种方法就是通过注释来告诉SpringMVC要添加的对象类型。
public String add(@ModelAttribute("user") User user)
这里的user便是对象类型的key,也就是jsp页面的modelAttribute的值。

第二个方法用于处理用户添加请求,并在添加成功后让用户跳转到显示用户的页面。
====

用户添加页面:

<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'add.jsp' starting page</title>
    
	 
  </head>
  
  <body>
   	<!--user对应的是model.addAttribute(new User());这里的对象类型-->
   	<sf:form method="post" modelAttribute="user">
   		用户名称:<sf:input path="username"/>
   		用户密码: <sf:input path="password"/>
   		用户昵称: <sf:input path="nickname"/>
   		用户邮箱: <sf:input path="email"/>
   		 <input type="submit" value="添加用户"/>
   	</sf:form>
   	
  </body>
</html>



4.验证用户信息
我们可以通过实现JSR303标准的validator工具来帮助验证用户信息。
最常见就是Hibernate提供的validator

4.1 加入hibernate-validator
                   
   <dependency>
				<groupId>org.hibernate</groupId>
				<artifactId>hibernate-validator</artifactId>
				<version>4.3.1.Final</version>
			</dependency>


4.2修改User.java类,分别在getter上加入注释:
@NotEmpty(message="用户名不能为空")
	public String getUsername() {
		return username;
	}

@Range(min=3,max=10,message="密码的长度必须在3-10之间")
	public String getPassword() {
		return password;
	}

	@Email(message="邮箱的格式不正确")
	public String getEmail() {
		return email;
	}


4.3 修改Controller里面的接受POST请求的方法,加入验证注释

@RequestMapping(value="/add",method=RequestMethod.POST)
	public String add(@Validated User user, BindingResult result){   //BindResult是验证结果类,必须紧跟@Validator 类后面,否则会报错。   
		if(result.hasErrors()){
			//说明有错误
			return "user/add"; //有错误则跳转到add视图中,
		}
...}


4.4 修改add.jsp页面,加入错误信息的显示
	<sf:form method="post" modelAttribute="user">
   		用户名称:<sf:input path="username"/><sf:errors path="username"/><br/>
   		用户密码: <sf:input path="password"/><sf:errors path="password"/><br/>
   		用户昵称: <sf:input path="nickname"/> <br/>
   		用户邮箱: <sf:input path="email"/><sf:errors path="email"/><br/>
   		 <input type="submit" value="添加用户"/>
   	</sf:form>



这里我第一次测试的时候没有出现预期的错误信息。
找了半天原因,才发现是hello-servlet.xml配置文件的问题。
这里必须要加入
<!-- JSR-303 support will be detected on classpath and enabled automatically --><mvc:annotation-driven/>
这里在Spring reference文件中查找一下Configuring a JSR-303 Validator for use by Spring MVC就能看到具体说明

猜你喜欢

转载自alleni123.iteye.com/blog/1986802