您的位置:首页 > 编程语言 > Java开发

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

2016-08-13 23:21 393 查看

一:参数绑定

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";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring mvc