springMVC学习笔记 --- day03参数绑定

一:参数绑定

1.基础类型的参数绑定
要求:
页面上字段的name属性的值要和方法中参数的名称相同
@RequestParam标签的使用

当页面传递的字段name值和controller中方法中的参数名称不相同时,使用@RequestParam将页面上的字段值绑定到方法中的参数上,但是使用该注解时要求参数一定有值,如果想让其没有值时也可以,需加上:required=false,此时也可以设置传递的值为null时的默认值,使用defaultValue属性

	@RequestMapping(value="editItems.do")
	//@RequestParam注解将页面上name值为 pid 的字段的值绑定到id参数上
	public String edit(@RequestParam(value="pid",required=false,defaultValue="1") Integer id){
		return "toEdit";
	}
2.Boolean类型的参数绑定

后台传递 0 或者 false  则自动转为 false

后台传递 1 或者  true  则自动转为 true

3.参数类型为包装类

如果参数类型为包装类,即类A中有另一个类B为该类A的属性,则在页面中传递值时的写法为name="B.属性"

例如:

POJO

public class QueryVo {

	private User user;
	
	private Boolean isDel;
	
	private Items items;
Controller

	@RequestMapping(value="/items/toEdit.do")
	public String toEdit(QueryVo vo, Model model){
		return "toEdit";
	}

jsp页面

<tr>
					<td width="20%" class="pn-flabel pn-flabel-h">
						商品生产日期:</td><td width="80%" class="pn-fcontent">
						<input type="text" class="required" name="items.createtime" 
						value="<fmt:formatDate value="${items.createtime }" pattern="yyyy-MM-dd HH:mm:ss"/>" maxlength="80"/>
					</td>
				</tr>
				<tr>
					<td width="20%" class="pn-flabel pn-flabel-h">
						商品描述:</td><td width="80%" class="pn-fcontent">
						<input type="text" class="required" name="items.detail" maxlength="80" value="${items.detail }"  size="60"/>
					</td>
				</tr>
				<tr>
					<td width="20%" class="pn-flabel pn-flabel-h">
						是否可用:</td><td width="80%" class="pn-fcontent">
						<input type="text" class="required" name="isDel" maxlength="80" size="60"/>
					</td>
				</tr>

4.参数类型为集合时
参数为list时不能直接放在controller方法中的参数上,而时应该放在包装类中进行接收

a、参数为Map

POJO

public class QueryVo {

	
	private Map<String , String> map;
JSP

	<tr>
		<td width="20%" class="pn-flabel pn-flabel-h">
			 数组:</td><td width="80%" class="pn-fcontent">
			<input type="text" class="required" name="map['color']" maxlength="80" size="60"/>
			<input type="text" class="required" name="map['size']" maxlength="80" size="60"/>
		</td>
	</tr>

b、参数为List,泛型为String

POJO

public class QueryVo {

	
	private List<String> list;
	

JSP

	<tr>
		<td width="20%" class="pn-flabel pn-flabel-h">
			 list:</td><td width="80%" class="pn-fcontent">
			<input type="text" class="required" name="list" maxlength="80" size="60"/>
			<input type="text" class="required" name="list" maxlength="80" size="60"/>
		</td>
	</tr>

c、参数为List,泛型为类

POJO

public class QueryVo {

	
	private List<User> users;
	

JSP

	<tr>
		<td width="20%" class="pn-flabel pn-flabel-h">
			 list==User1:</td><td width="80%" class="pn-fcontent">
			<input type="text" class="required" name="users[0].username" maxlength="80" size="60"/>
			<input type="text" class="required" name="users[0].address" maxlength="80" size="60"/>
		</td>
	</tr>
	<tr>
		<td width="20%" class="pn-flabel pn-flabel-h">
			 list==User2:</td><td width="80%" class="pn-fcontent">
			<input type="text" class="required" name="users[1].username" maxlength="80" size="60"/>
			<input type="text" class="required" name="users[1].address" maxlength="80" size="60"/>
		</td>
	</tr>

d、参数类型为日期

由于日期类型的格式不确定,因此在进行参数绑定之前需要使用转换器对日期的格式进行转换

(1)、编写转换器类

package com.ssm.common.convertion;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;

/**
 * 自定义日期转换类,实现Converter接口
 * Converter<S, T>   其中:S 是页面传递的参数类型    T 是需要转换为的类型
 * @author Administrator
 *
 */
public class DateConvertor implements Converter<String, Date> {

	@Override
	public Date convert(String source) {
		try {
			if(source != null){
				return new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").parse(source);
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return null;
	}

}

(2)、在springmvc核心配置文件中添加转换器

	<!-- 处理器映射器,处理器适配器 
		使用该配置可以替代处理器适配器和处理器映射器的配置-->
	<mvc:annotation-driven conversion-service="conversionService" />
	
	<!-- 配置自定义转换器 -->
	<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
		<property name="converters">
			<list>
				<bean class="com.ssm.common.convertion.DateConvertor"></bean>
			</list>
		</property>
	</bean>

e、接收的参数类型为数组

springmvc默认会将具有同名框的一组值使用",  "隔开,即使用逗号+空格进行分割放入数组中 

(1)、页面的写法

<table width="100%" border=1>
<tr>
	<td>选择</td>
	<td>商品名称</td>
	<td>商品价格</td>
	<td>生产日期</td>
	<td>商品描述</td>
	<td>操作</td>
</tr>
<c:forEach items="${itemList }" var="item" varStatus="status">
<tr>
	<td>
		<input type="checkbox" name="ids" value="${item.id }">
		<input type="hidden" name="itemList[${status.index }].id" value="${item.id }">
	</td>
	<td><input type="text" name="itemList[${status.index }].name" value="${item.name }"></td>
	<td><input type="text" name="itemList[${status.index }].price" value="${item.price }"></td>
	<td><input type="text" name="itemList[${status.index }].createtime" value="<fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"></td>
	<td><input type="text" name="itemList[${status.index }].detail" value="${item.detail }"></td>
	
	<td><a href="${pageContext.request.contextPath }/items/itemEdit.action?id=${item.id}">修改</a></td>

</tr>
</c:forEach>

</table>

(2)、controller中接收的参数形式
	@RequestMapping("/queryitem")
	public String queryItem(QueryVo queryVo, int[] ids, ArrayList<Items> itemList) {
		//ids的内容为[1, 2, 3, 4, 5]
		System.out.println(ids);
		System.out.println(queryVo);
		return "success";
	}








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值