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

    xiaoxiao2025-03-04  7

    一:参数绑定

    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"; }

    转载请注明原文地址: https://ju.6miu.com/read-1296849.html
    最新回复(0)