【SpringMVC整合MyBatis】数据回显

数据回显

1.什么数据回显
提交后,如果出现错误,将刚才提交的数据回显到刚才的提交页面。

2.pojo数据回显方法

2.1springmvc默认对pojo数据进行回显。
pojo数据传入controller方法后,springmvc自动将pojo数据放到request域,key等于pojo类型(首字母小写)
说白了就是items类

public class Items {

    private Integer id;

    private String name;

    private Float price;

    private String pic;

    private Date createtime;

    private String detail;
    //get和set方法省略
}

items类在网页中取name的写法是:${items.name},也就是request域的key是items,也就是当初controller方法中包装进去的value的key(model.addAttribute("items",items);),如果在网页中改为${items22.name}就取不出来值了,因为key不对了,当然也就无法使用springmvc的默认回显方法了。

为了防止这种错误或者是为了让回显数据配置更加轻松,我们可以使用@ModelAttribute指定pojo回显到页面在request中的key

如:(现在我们把当初controller方法中包装进去的value的key改为items22(model.addAttribute("items22",items);),此时如果不用@ModelAttribute注解,springmvc默认的回显机制会默认从request域中寻找key为items(pojo类首字母小写)的value,结果就是找不到。已经经过验证)

//商品信息修改提交
	//在需要校验的pojo前边加@Validated,在需要校验的pojo后边添加BindingResult bindingResult接收校验出错信息
	//注意:@Validatedh和BindingResult bindingResult是配对出现,并且在形参中出现的顺序是固定的(一前一后)
	//value={ValidGroup1.class}指定使用ValidGroup1分组的校验
	//@ModelAttribute可以指定pojo回显到页面在request中的key
	@RequestMapping("/editItemsSubmit")
	public String editItemsSubmit(Model model,HttpServletRequest request,Integer id,
			@ModelAttribute("items22") @Validated(value={ValidGroup1.class}) ItemsCustom itemsCustom,BindingResult bindingResult)throws Exception{
	//具体修改方法略
}

修改页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix="fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>修改商品信息</title>

</head>
<body>
<!-- 显示错误信息 -->
<c:if test="${allErrors!=null}">
	<c:forEach items="${allErrors}" var="error">
		<font color="red">${error.defaultMessage}</font><br/>
	</c:forEach>
</c:if>

<form id="itemForm" action="${pageContext.request.contextPath }/items/editItemsSubmit.action" method="post" >
<input type="hidden" name="id" value="${items22.id }"/>
修改商品信息:
<table width="100%" border=1>
<tr>
	<td>商品名称</td>
	<td><input type="text" name="name" value="${items22.name }"/></td>
</tr>
<tr>
	<td>商品价格</td>
	<td><input type="text" name="price" value="${items22.price }"/></td>
</tr>
<tr>
	<td>商品生产日期</td>
	<td><input type="text" name="createtime" value="<fmt:formatDate value="${items22.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>
</tr>
<%-- <tr>
	<td>商品图片</td>
	<td>
		<c:if test="${item.pic !=null}">
			<img src="/pic/${item.pic}" width=100 height=100/>
			<br/>
		</c:if>
		<input type="file"  name="pictureFile"/>
	</td>
</tr> --%>
<tr>
	<td>商品简介</td>
	<td>
	<textarea rows="3" cols="30" name="detail">${items22.detail }</textarea>
	</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="提交"/>
</td>
</tr>
</table>

</form>
</body>

</html>

测试:

回显成功!
注:看了这么久,笔者还是建议我们还是使用springmvc默认的回显机制,这样我们只需要记住一点,将要包装到model或request域中的key-value中的key写成相应类的首字母小写名即可。个人看法。

2.2@ModelAttribute还可以将方法的返回值传到页面

在商品查询列表页面,通过商品类型查询商品信息。
在controller中定义商品类型查询方法,最终将商品类型传到页面。

//商品分类
//itemTypes表示最终将方法返回值放在request中的key
@ModelAttribute("itemtypes")
public Map<String,String> getItemTypes(){

	//先使用静态数据测试
	Map<String,String> itemTypes=new HashMap<String,String>();
	itemTypes.put("101", "数码");
	itemTypes.put("102", "母婴");

	return itemTypes;
}

页面上可以得到itemTypes数据(不需要URL请求)。
商品类型:

<select name="itemtype">
	<c:forEach items="${itemtypes}" var="itemtype">
		<option value="${itemtype.key}">${itemtype.value }</option>
	</c:forEach>
</select>

测试:

获取成功!

2.3使用最简单方法使用model,可以不用@ModelAttribute

@RequestMapping("/editItemsSubmit")
	public String editItemsSubmit(Model model,HttpServletRequest request,Integer id,@Validated(value={ValidGroup1.class}) ItemsCustom itemsCustom,BindingResult bindingResult)throws Exception{

		//获取校验错误信息
		if(bindingResult.hasErrors()){
			//输出错误信息
			List<ObjectError> allErrors=bindingResult.getAllErrors();

			for(ObjectError objectError:allErrors){
				//输出错误信息
				System.out.println(objectError.getDefaultMessage());
			}

			//将错误传到页面
			model.addAttribute("allErrors",allErrors);

			//可以直接使用model将提交pojo回显到页面
			model.addAttribute("items22",itemsCustom);

			//出错之后要跳转的页面
			return "items/editItems";
		}

		//调用service更新商品信息,页面需要将商品信息传到此方法
		itemsService.updateItems(id, itemsCustom);

		//重定向到商品的查询列表
		return "redirect:queryItems.action";
	}

即是其中的这么一句:
model.addAttribute("items22",itemsCustom);
 
3.简单类型数据回显

使用最简单方法使用model。
还是使用model或者request去封装跳转即可

model.addAttribute("id",id);

转载请注明出处:http://blog.csdn.net/acmman/article/details/47603821

时间: 2024-10-08 01:20:20

【SpringMVC整合MyBatis】数据回显的相关文章

SpringMVC整合mybatis实例代码_java

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis . 一.逆向工程生成基础信息 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis G

关于分页问题和数据回显问题

问题描述 关于分页问题和数据回显问题 当点击下一页只有一条数据的时候,我查询该数据为什么查到的数据为空 解决方案 checkbox数据回显问题数据分页问题-MSSQL 解决方案二: 打个断点,调试一下,看看点击下一页是否和你预想的一样查询数据库,并返回数据库.看看具体哪里出现问题.在解决. 解决方案三: 看看你从哪获取了数据,打印出来看看是否为空,有没有获取到 解决方案四: 这个估计要看查询总条数count和查询出来的list的条数是否是一样的,曾经遇到类似的问题 解决方案五: 你可以试试打印语

struts2标签&amp;amp;lt;s:select&amp;amp;gt;数据回显的问题

问题描述 struts2标签<s:select>数据回显的问题 同样通过value属性,进行回显."呼吸系统"正常,"眼睛光反射"不正常. 解决方案 那你的"眼睛光反射"是和"呼吸系统"一样的存储类型吗? 解决方案二: Struts2标签回显问题

一脸懵逼学习Struts数据校验以及数据回显,模型驱动,防止表单重复提交的应用。

1:Struts2表单数据校验: (1)前台校验,也称之为客户端校验,主要是通过Javascript编程的方式进行数据的验证. (2)后台校验,也称之为服务器校验,这里指的是使用Struts2通过xml配置的方式进行表单数据的校验. (3)代码方式验证Action中所有的方法:代码方式验证Action中指定的方法:xml方式验证Action中所有的方法:xml方式验证Action中指定的方法: 2:代码方式验证Action中所有的方法(自己记得导jar包和我配置web.xml文件,自己脑补吧):

【SpringMVC整合MyBatis】springmvc上传图片

上传图片 1.需求 在修改商品页面,添加上传商品图片功能. 2.springmvc中对多部件类型解析 在页面form中提交enctype="multipart/form-data"的数据时,需要springmvc对multipart类型的数据进行解析. 在springmvc.xml中配置multipart类型解析器. <!-- 文件上传 --> <bean id="multipartResolver" class="org.springf

【SpringMVC整合MyBatis】整合思路与工程结构

springmvc和mybatis整合 1.需求 使用springmvc和mybatis完成商品列表查询. 2.整合思路 springmvc+mybaits的系统架构: 如图 第一步:整合dao层mybatis和spring整合,通过spring管理mapper接口.使用mapper的扫描器自动扫描mapper接口在spring中进行注册. 第二步:整合service层通过spring管理 service接口.使用配置方式将service接口配置在spring配置文件中.实现事务控制. 第三步:

【SpringMVC整合MyBatis】提供学习参考的项目源码

最近很多博友私信向我索要此开发专栏的源代码,为了发挥开源精神,我决定将<MyBatis+SpringMVC>专栏所有源代码工程公布给大家,供大家学习参考! 共享的源代码分别是,MyBatis单独的工程,SpringMVC单独的工程,Spring与MyBatis整合的工程,SpringMVC与MyBatis整合的工程.另外感谢光临博客,祝大家学习愉快 源代码链接地址:http://download.csdn.net/detail/u013517797/9031455

C# 串口 SerialPort读取串口数据回显到文本框(显示不出来?)

问题描述 求教:环境VS2010,RS-232,通过SerialPort读取COM1口数据,回显到文本框中,但是无法获取回显数据.而通过串口调试工具,可以读取到发送到串口的值?源码: 解决方案 本帖最后由 sucretiger 于 2014-09-03 17:16:56 编辑解决方案二:断点看,到底收到数据没有解决方案三:估计是你程序没写对,你需要加一点延迟,然后把缓冲区的数据全部取出来.注意串口是串行发送数据的,你需要累加它发来的数据,而不是简单的接收,不然后面的数据会冲掉前面的.解决方案四:

EditText数据回显

首先我们假设我们把用户名和密码都保存在data/data/com.xxx.xxx/files/info.txt中,格式为:用户名##密码.我们接下来要做的就是把info.txt中保存的用户名和密码分别回显在两个EditText中. 下面为自定义的回显用户名和密码的方法: public static Map<String,String> getSaveUserInfo(Contextcontext)(){ Filefile=new File(context.getFilesDir(), &quo