前台jsp页面和后台传值的几种方式:
不用SpringMVC自带的标签
前台---->后台,通过表单传递数据():
1.jsp页面代码如下, modelattribute 有没有都行
<%@ 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>Insert title here</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
Username:<input type="text" name="username"/> <sf:errors path="username">
Password:<input type="password" name="password"/> <sf:errors path="password">
Nickname:<input type="text" name="nickname"/></br>
Email<input type="text" name="email"/>
</form>
</body>
</html>
2.写Action,如下两种方式都可以:
第一种,表单的name属性值必须和接受的参数同名。否则,接收到的参数为null,但不报错
第二种,表单的name属性值必须和接收对象的属性同名。否则,接收到的参数为null,但不报错
@RequestMapping(value="/add",method=RequestMethod.POST)
public String userAdd(String username,String password,String nickname,String email){
User user = new User(username,password,nickname,email);
System.out.println(user.toString());
users.put(user.getNickname(), user);
//客户端跳转
return "redirect:/user/users";
}
@RequestMapping(value="/add",method=RequestMethod.POST)
public String userAdd(User user) {
System.out.println(user.toString());
users.put(user.getNickname(), user);
//客户端跳转
return "redirect:/user/users";
}
注意1:即使我们的Action使用第二种方式(选用User类对象作为参数),前台界面也不能写成user.username ,后台这样会接收失败,得到的值是null。这一点如果没记错的话,应该和Struts2是不一样的
<%@ 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>Insert title here</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
Username:<input type="text" name="user.username"/>
Password:<input type="password" name="user.password"/>
Nickname:<input type="text" name="user.nickname"/>
Email<input type="text" name="user.email"/>
<input type="submit" value="添加用户" />
</form>
</body>
</html>
注意2:我们的Action使用第二种方式(选用User类对象作为参数),我们可以在服务端使用@Validated注解来进行服务端验证。但是由于我们前台jsp页面没有使用SpringMVC自带的标签库,前台jsp页面无法显示错误信息,也就是<sf:errors path="username"></sf:errors> 不起作用(不报错)。
----如果只把<form></form>标签缓存<sf:form></sf:form>,并且添加modelAttribute="user"属性,不该其他内容,<sf:error>会起作用。但是我们不会这样做,没有任何意义,要用就统一用SpringMVC自带的标签库,要么就全部用,混着用容易出错。
后台---->前台 model.addAttribute("users",users):
后台Action代码
@RequestMapping(value={"/users","/",""},method=RequestMethod.GET)
public String userList(Model model){
//model.addAllAttributes(user);//key是map(类型名首字母小写)
model.addAttribute("users",users);
return "user/list";
}
@RequestMapping(value="/add",method=RequestMethod.GET)
public String userAdd(){
model.addAttribute("user", new User("newUser","newUserPwd","newUserNickname","newUser@126.com"));
return "user/add";
}
前台jap页面取值:使用jstl:<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8