springmvc的参数绑定

来源:互联网 发布:匿名四轴源码 编辑:程序博客网 时间:2024/06/06 02:03

@Controller

public class ItemsController3 {

//商品查询列表

//@RequestMapping实现 对queryItems方法和url进行映射,一个方法对应一个url

//一般建议将url和方法写成一样

@RequestMapping("/queryItems")

public ModelAndView queryItems()throws Exception{

//调用service查找 数据库,查询商品列表,这里使用静态数据模拟

List<Items> itemsList = new ArrayList<Items>();

//list中填充静态数据

Items items_1 = new Items();

items_1.setName("联想笔记本");

items_1.setPrice(6000f);

items_1.setDetail("ThinkPad T430 联想笔记本电脑!");

Items items_2 = new Items();

items_2.setName("苹果手机");

items_2.setPrice(5000f);

items_2.setDetail("iphone6苹果手机!");

itemsList.add(items_1);

itemsList.add(items_2);

//返回ModelAndView

ModelAndView modelAndView =  new ModelAndView();

//相当 于requestsetAttribut,在jsp页面中通过itemsList取数据

modelAndView.addObject("itemsList", itemsList);

//指定视图

modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");

return modelAndView;

}

 

 

 

表示返回逻辑视图名。

真正视图(jsp路径)=前缀+逻辑视图名+后缀

 

2redirect重定向

商品修改提交后,重定向到商品查询列表。

redirect重定向特点:浏览器地址栏中的url会变化。修改提交的request数据无法传到重定向的地址。因为重定向后重新进行requestrequest无法共享)

 

 

3forward页面转发

通过forward进行页面转发,浏览器地址栏url不变,request可以共享。

 

 

 

注解开发中参数绑定:

request请求过来的key/value的数据(理解一个串),通过转换(参数绑定的一部分),将key/value串转成形参,将转换后的结果传给形参(整个参数绑定过程)。

springmvc所支持参数绑定:

1、默认支持很多类型,HttpServletRequestresponsesession

model/modelMap(将模型数据填充到request)

2、支持简单数据类型,整型、字符串、日期。。

只要保证request请求的参数名和形参名称一致,自动绑定成功

如果request请求的参数名和形参名称不一致,可以使用@RequestParam(指定request请求的参数名),@RequestParam加在形参的前边。

3、支持pojo类型

只要保证request请求的参数名称和pojo中的属性名一致,自动将request请求的参数设置到pojo的属性中。

注意:形参中即有pojo类型又有简单类型,参数绑定互不影响。

自定义参数绑定:

日期类型绑定自定义:

定义的Converter<源类型,目标类型>接口实现类,比如:

Converter<String,Date>表示:将请求的日期数据串转成java中的日期类型。

注意:要转换的目标类型一定和接收的pojo中的属性类型一致。

将定义的Converter实现类注入到处理器适配器中。

<mvc:annotation-driven conversion-service="conversionService">

</mvc:annotation-driven>

<!-- conversionService -->

<bean id="conversionService"

class="org.springframework.format.support.FormattingConversionServiceFactoryBean">

<!-- 转换器 -->

<property name="converters">

<list>

<bean class="cn.itcast.ssm.controller.converter.CustomDateConverter"/>

</list>

</property>

</bean>

 

 

springmvcstruts2区别:

springmvc面向方法开发的(更接近service接口的开发方式),struts2面向类开发。

springmvc可以单例开发,struts2只能是多例开发。

 

 

 

 

包装类型pojo参数绑定

 

2.1 需求

商品查询controller方法中实现商品查询条件传入。

 

2.2 实现方法

第一种方法:在形参中 添加HttpServletRequest request参数,通过request接收查询条件参数。

第二种方法:在形参中让包装类型的pojo接收查询条件参数。

分析:

页面传参数的特点:复杂,多样性。条件包括 :用户账号、商品编号、订单信息。。。

如果将用户账号、商品编号、订单信息等放在简单pojo(属性是简单类型)中,pojo类属性比较多,比较乱。

建议使用包装类型的pojopojo中属性是pojo

2.3 页面参数和controller方法形参定义

 

页面参数:

 

商品名称:<input name="itemsCustom.name" />

注意:itemsCustom和包装pojo中的属性一致即可。

 

controller方法形参:

public ModelAndView queryItems(HttpServletRequest request,ItemsQueryVo itemsQueryVo) throws Exception

 

 

集合类型绑定

 

3.1 数组绑定

 

3.1.1 需求

商品批量删除,用户在页面选择多个商品,批量删除。

 

3.1.2 表现层实现

关键:将页面选择(多选)的商品id,传到controller方法的形参,方法形参使用数组接收页面请求的多个商品id

 

 

controller方法定义:

 

 

 

页面定义:

 

 

3.2 list绑定

3.2.1 需求

通常在需要批量提交数据时,将提交的数据绑定到list<pojo>中,比如:成绩录入(录入多门课成绩,批量提交),

本例子需求:批量商品修改,在页面输入多个商品信息,将多个商品信息提交到controller方法中。

 

3.2.2 表现层实现

 

 

controller方法定义:

1、进入批量商品修改页面(页面样式参考商品列表实现)

2、批量修改商品提交

使用List接收页面提交的批量数据,通过包装pojo接收,在包装pojo中定义list<pojo>属性

 

 

 

页面定义:

 

 

3.3 map绑定

也通过在包装pojo中定义map类型属性。

 

在包装类中定义Map对象,并添加get/set方法,action使用包装对象接收。

包装类中定义Map对象如下:

Public class QueryVo {

private Map<String, Object> itemInfo = new HashMap<String, Object>();

  //get/set方法..

}

 

 

 

页面定义如下:

 

<tr>

<td>学生信息:</td>

<td>

姓名<inputtype="text"name="itemInfo['name']"/>

年龄<inputtype="text"name="itemInfo['price']"/>

.. .. ..

</td>

</tr>

 

Contrller方法定义如下:

 

public String useraddsubmit(Model model,QueryVo queryVo)throws Exception{

System.out.println(queryVo.getStudentinfo());

}

 

 

 


原创粉丝点击