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

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值