学习笔记之springmvc的数据回显

本文介绍SpringMVC中如何实现数据回显功能,重点讲解如何利用model.addAttribute方法及自动数据回显机制来确保修改页面上的数据能正确显示。同时探讨了在不同情况下的数据绑定与回显策略。

需求:

假设我们要修改一条信息,进入修改这条信息的页面进行修改,如果修改的数据不符合要求则需要返回修改前的页面,修改前的数据也要原封不动的返回。

这时就用到了数据回显。

首先梳理下这个数据回显完成的过程。

先在前端页面获取后台传入的信息,传入信息要通过model的addAttribute完成数据的传入。

如果出错了,回到之前的页面和数据。这时数据又需要model.addAttribue方法完成数据的传入。

springmvc中提供了自动数据回显(只限于pojo类型)

springmvc自动将形参中的pojo重新放回request域中,requestkeypojo的类名(首字母小写)

public String editItemsAllSubmit(Model model, ItemsQueryVo itemsQueryVo)
			throws Exception {

这里的参数类型是ItemsQueryVo

在前台页面里

	<form id="itemForm"
		action="${pageContext.request.contextPath }/editItemsSubmit.action"
		method="post" enctype="multipart/form-data">
		<input type="hidden" name="id" value="${itemsCustom.id }" /> 修改商品信息:
		<table width="100%" border=1>
			<tr>
				<td>商品名称</td>
				<td><input type="text" name="name" value="${itemsCustom.name }" /></td>
			</tr>
			<tr>
				<td>商品价格</td>
				<td><input type="text" name="price"
					value="${itemsCustom.price }" /></td>
			</tr>
			<tr>
				<td>商品生产日期</td>
				<td><input type="text" name="createtime"
					value="<fmt:formatDate value="${itemsCustom.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>" /></td>
			</tr>
			<tr>

这里的名字和pojo类名字相同才能完成自动回显。

相当于

springmvc自动将itemsCustom放回request,相当于调用下边的代码:model.addAttribute("itemsCustom", itemsCustom);

  页面中的从“itemsCustom”中取数据。

如果说jsp的页面的属性名称不再和controller的参数对应那么需要做下面的工作

				<td>商品生产日期</td>
				<td><input type="text" name="createtime"
					value="<fmt:formatDate value="${items.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>" /></td>
			</tr>
			<tr>

这里不是itemsCustom而是items了,那么这时候出错因为不和形参匹配。所以无法把数据回显。需要在controller做些工作

        

public String editItemSubmit(Model model,@ModelAttribute("item") ItemsCustom itemsCustom){}
将前端页面的属性名称和形参进行绑定即可


注意:自动回显只有pojo类型可以,基本类型无法完成自动回显。

那么在每次需要数据回显时完成数据的传出就是model.addAttribute。


也可以将方法的返回值传入

假设有这么一个函数

//商品分类
    @ModelAttribute("itemtypes")//这里将返回值交给了jsp页面
    public Map<String, String> getItemTypes(){
        
        Map<String, String> itemTypes = new HashMap<String,String>();
        itemTypes.put("101", "数码");
        itemTypes.put("102", "母婴");
        
        return itemTypes;
    }
jsp页面里
 <select name="itemtype">
2     <c:forEach items="${itemtypes }" var="itemtype">
3         <option value="${itemtype.key }">${itemtype.value }</option>        
4     </c:forEach>
5 </select>

也能得到相应的数据。

参考这位博主的博客,多谢博主https://www.cnblogs.com/lcngu/p/5517877.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值