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>密&nbsp&nbsp码</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).

相关推荐