Spring 4.x+Spring MVC 4.x+MyBatis 3.x 整合(三)Spring MVC 参数传递

来源:互联网 发布:mac 控制安卓手机屏幕 编辑:程序博客网 时间:2024/05/17 23:52

1 不带参数

回顾一下第一篇中的示例代码:

// 访问URL:website_java2/enter/index.do  @RequestMapping(value = "/index", method = RequestMethod.GET)  public String index() {      return "manage/enter/index";  } 

该示例没有任何输入参数,也没有任何输出参数,仅仅是返回一个view。

RequestMapping是一个用来处理请求地址映射的注解,共有6个属性,如下:

value:指定请求的实际地址,指定的地址可以是URI Template 模式;
method:指定请求的method类型, GET、POST、PUT、DELETE等;
consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
params:指定request中必须包含某些参数值是,才让该方法处理。
headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。

所以本示例代码的访问地址是:xxx/index.do,而且要是GET方式访问。


2 带输入参数

假设有如下表单:

<form id="loginForm" method="post" action="login.do">   <table>   <tr>   <td colspan="2"><h1>登录</h1></td>   </tr>   <tr height="30" >   <td>用户名:</td>   <td><input type="text" name="loginName"></input></td>   </tr>   <tr height="30" >   <td>密码:</td>   <td><input type="text" name="loginPwd"></input></td>   </tr>   <tr height="40" >   <td colspan="2" align="right"><input type="submit" value="确定"/></td>   </tr>   </table></form>


访问的Action应该是这样的:

方法一:

@RequestMapping(value = "/login", method = RequestMethod.POST)public String login(String loginName, String loginPwd) {String msg = "用户登录,用户名:" + loginName + ",密码:" + loginPwd;System.out.println(msg);return "manage/enter/main";}
与上一个示例的区别是增加了2个输入参数,而且要是POST方式访问。

请注意表单的两个input名称与login的输入参数名称必须一致,如果不一致则需要使用RequestParam注解,修改上面的代码如下:

方法二:

// 访问URL:website_java2/enter/login.do@RequestMapping(value = "/login", method = RequestMethod.POST)public String login(@RequestParam("loginName") String name, @RequestParam("loginPwd") String pass) {String msg = "用户登录,用户名:" + name + ",密码:" + pass;System.out.println(msg);return "manage/enter/main";}


在上面的示例中仅有2个输入参数,假如输入参数有10个、20个,合理的做法是使用一个javabean对象:

public class User implements java.io.Serializable {private String loginName;private String loginPwd;public String getLoginName() {return loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}public String getLoginPwd() {return loginPwd;}public void setLoginPwd(String loginPwd) {this.loginPwd = loginPwd;}}


修改前文的Action如下:

方法三:

// 访问URL:website_java2/enter/login.do@RequestMapping(value = "/login", method = RequestMethod.POST)public String login(User user) {String msg = "用户登录,用户名:" + user.getLoginName() + ",密码:" + user.getLoginPwd();System.out.println(msg);return "manage/enter/main";}
这里比较一个则比前方要简洁多了。


对于复杂的表单,可能需要映射到多个javabean中,假设有如下jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%><html><head><title>系统登录入口</title></head><body><form:form method="POST" action="login.do" modelAttribute="user"><table><tr><td colspan="2"><h1>登录</h1></td></tr><tr height="30"><td>用户名:</td><td><input type="text" name="loginName"></input></td></tr><tr height="30"><td>密码:</td><td><input type="text" name="loginPwd"></input></td></tr><tr height="40"><td colspan="2" align="right"><input type="submit" value="确定" /></td></tr></table></form:form></body></html>

这里注意一下form的生成方式,其实modelAttribute属性就是生成html代码中的form.id值,生成后的form如下:

<form id="user" action="login.do" method="POST">

这时Action可以修改为如下:

方法四:

// 访问URL:website_java2/enter/login.do@RequestMapping(value = "/login", method = RequestMethod.POST)public String login(@ModelAttribute("user") User user) {String msg = "用户登录,用户名:" + user.getLoginName() + ",密码:" + user.getLoginPwd();System.out.println(msg);return "manage/enter/main";}

也就是使用ModelAttribute注解,指定form的id值。


3 带输出参数

我们修改最初(第一篇)中的代码如下:

方法一:

// 访问URL:website_java2/enter/index.do@RequestMapping(value = "/index", method = RequestMethod.GET)public String index(Map<String, Object> map) {logger.info("访问了index方法");map.put("title", "系统登录");map.put("date", "20150316");return "manage/enter/index";}

修改index.jsp如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><html>  <head>  <title>系统登录入口</title>  </head>  <body>  <form id="loginForm" method="post" action="login.do">   <table>   <tr>   <td colspan="2"><h1>${title}-${date}</h1></td>   </tr>   <tr height="30" >   <td>用户名:</td>   <td><input type="text" name="loginName"></input></td>   </tr>   <tr height="30" >   <td>密码:</td>   <td><input type="text" name="loginPwd"></input></td>   </tr>   <tr height="40" >   <td colspan="2" align="right"><input type="submit" value="确定"/></td>   </tr>   </table>   </form>  </body></html>


在浏览器中访问大概是这样的:


方法二:

上例上使用的是map对象,当然也可以使用spring的Model对象:

// 访问URL:website_java2/enter/index.do@RequestMapping(value = "/index", method = RequestMethod.GET)public String index(Model model) {logger.info("访问了index方法");model.addAttribute("title", "系统登录");model.addAttribute("date", "20150316");return "manage/enter/index";}

jsp页面和浏览器显示的结果和上例一样。


4 同时带有输入和输出参数

参考2和3,同时带有输入和输出参数的示例如下:

// 访问URL:website_java2/enter/index.do@RequestMapping(value = "/index", method = RequestMethod.GET)public String index(String id, Model model) {logger.info("访问了index方法,id=" + id);model.addAttribute("title", "系统登录");model.addAttribute("date", "20150316");return "manage/enter/index";}

依次类推,Spring MVC使用还是挺方便的。


0 0
原创粉丝点击