03.0 使用Spring标签创建表单
03.0 使用Spring标签创建表单
开发环境参见: 01.0 SpringMVC4 的开发环境搭建
例:jsp页面向控制器提交(submit方式)数据----实现登录功能的part1
本例实现, Spring标签创建表单, 表单页面向控制器提交数据, 后台得到这些数据, 并打印.
访问http://localhost:8080/springmvc-3/login, 填入用户名密码, 点提交跳到index页面.
1. 定义bean类"com.wzr.model.User"
package com.wzr.model;
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2. 新建登录页面login.jsp
<%@ 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=ISO-8859-1">
<title>login</title>
</head>
<body>
<sf:form modelAttribute="loginUser" method="post">
<table width="30" >
<tr>
<td colspan="2">登录窗口</td>
</tr>
<tr>
<td>用户名</td>
<td><sf:input path="username" size="15" /></td>
</tr>
<tr>
<td>密  码</td>
<td><sf:password path="password" size="15" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="登录"></td>
</tr>
</table>
</sf:form>
</body>
</html>
说明:
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %> , 此句表示当前页面引用Spring标签, 标签前缀为"sf".
<sf:form modelAttribute="loginUser" method="post">, 此句表示要新建一个form表单, 提交方式为post. modelAttribute="loginUser"表示页面要回显的对象名, 与(下面要建立的)controller中model.addAttribute(键名,值)对应, "loginUser"代表键名.
观察上面的"com.wzr.model.User"类, 其中包括2个属性username;password; 再观察jsp页面上控件的path属性也是"username","password", 二者为一一对应关系(实际应用中类定义的属性可以多于页面上的字段).
3. 控制器LoginController代码:
package com.wzr.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.wzr.model.User;
@Controller
public class LoginController {
// 当由url地址访问(相当于Get方式提交),被此方法捕获
@RequestMapping(value="/login", method=RequestMethod.GET)
public String Login(Model model){
model.addAttribute("loginUser",new User());
return "login"; // 转到登录界面
}
// 由登录窗口提交表单访问(POST方式提交),被此方法捕获
@RequestMapping(value="/login", method=RequestMethod.POST)
public String Login(User user, Model model){ // 获取了页面上传来(经过spring组装)的User对象
model.addAttribute("loginUser",user); // 把User对象放入requestScope
System.out.println(user.getUsername());
System.out.println(user.getPassword());
return "index"; // 转到登录成功页面
}
}
代码说明:
method=RequestMethod.GET只接收GET方式提交的数据
method=RequestMethod.POST只接收POST方式提交的数据
需要注意的是, 在一个页面上如果使用了POST方式提交, 之后无论是F5刷新, 或是地址栏回车, 都仍然是POST方式提交.
4. index.jsp页面用EL表达式显示用户名略(参见02.0节)
总结:
与<1.0 SpringMVC4 的开发环境搭建>过程类似, 点submit提交后消息路由为: Tomcat-->web.xml-->spring-->spring1-servlet.xml(自定义的xml文件)-->com.wzr.controller.LoginController,由于设置了method="post", 将定位到"public String Login(User user)", 之前login.jsp页面已经根据modelAttribute找到了"com.wzr.model.User"类, 产生了对象, 并用页面上的数据填充了此对象的属性, 这时把此对象放到Login方法的参数中(也就是这里的user).