springmvc数据回显问题

本文介绍了SpringMVC中实现数据回显的多种方法,包括默认的POJO数据回显、使用@ModelAttribute指定回显key、通过@ModelAttribute返回值进行回显及利用Model进行简单类型数据回显。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据回显就是在页面提交请求后,如果出现错误,则将刚才提交的数据回显到刚才的提交页面

1、springmvc默认对pojo数据进行回显

Pojo数据传入controller方法后,springmvc自动将pojo数据放到request域,key等于pojo类型(首字母小写)。如:

	<tr>
		<td>商品价格</td>
		<td><input type="text" name="price" value="$<span style="background-color: rgb(255, 255, 102);">{itemsCustom</span>.price }"/></td>
	</tr>
页面中的取值key为itemsCustom,要和 controller方法形参中的参数名称一致,这样springmvc就会自动的进行数据的回显

	@RequestMapping("/editItemsSubmit")
	public String editItemsSubmit(Model model,HttpServletRequest request,Integer id,String name,
			@Validated(value={ValidGroup1.class}) ItemsCustom <span style="background-color: rgb(255, 255, 102);">itemsCusto</span>m,BindingResult bindingResult) throws Exception{}

2、使用@ModelAttribute("items"):可以指定pojo回显到页面在request域中的key

//@ModelAttribute("items"):可以指定pojo回显到页面在request域中的key
@RequestMapping("/editItemsSubmit")
public String editItemsSubmit(Model model,HttpServletRequest request,Integer id,String name,
	<span style="background-color: rgb(255, 255, 102);">@ModelAttribute("items")</span> @Validated(value={ValidGroup1.class}) ItemsCustom itemsCustom,BindingResult bindingResult) throws Exception{}
页面中获取参数的key就是@ModelAttribute中定义的key

<table width="100%;" border="1">
			<tr>
				<td>商品名称</td>
				<td><input type="text" name="name" value="${<span style="background-color: rgb(255, 255, 102);">items</span>.name }"/></td>
			</tr>
			<tr>
				<td>商品价格</td>
				<td><input type="text" name="price" value="${<span style="background-color: rgb(255, 255, 102);">items</span>.price }"/></td>
			</tr>
			<tr>
				<td>商品生产日期</td>
				<td><input type="text" name="createtime" value="<fmt:formatDate value="${<span style="background-color: rgb(255, 255, 102);">items</span>.createtime }" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>
			</tr>
</table>

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

例如:在controller中定义商品类型查询方法,最终将商品类型传到页面。

	//商品分类
	//itemtypes表示最终将方法返回值放在request中的key
	@ModelAttribute("<span style="background-color: rgb(255, 255, 102);">itemtypes</span>")
	public Map<String, Object> getItemTypes(){
		Map<String, Object> itemTypes = new HashMap<String, Object>();
		itemTypes.put("101", "数码");
		itemTypes.put("102", "母婴");
		return itemTypes;
	}
在页面上可以得到itemsTypes数据

<td>
					商品类型:
					<select name="itemtype">
						<c:forEach items="${<span style="background-color: rgb(255, 255, 102);">itemtypes</span> }" var="itemtype">
							<option value="${itemtype.key }">${itemtype.value}</option>
						</c:forEach>
					</select>
				</td>
3、最简单的数据回显的方式:使用model

	@RequestMapping("/editItemsSubmit")
	public String editItemsSubmit(Model model,HttpServletRequest request,Integer id,String name,
			@ModelAttribute("items") @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);
			<span style="background-color: rgb(255, 255, 102);">//可以直接使用model将提交的pojo回显到页面
			model.addAttribute("itemsCustom",itemsCustom);</span>
			
			//出错后重新回到商品的修改页面
			return "items/editItems";
		}
		
		//调用service更新商品信息,页面需要将商品新传到此方法
		itemsService.updateItems(id, itemsCustom);
		
		//重定向到商品的查询列表
		return "redirect:queryItems.action";
	}
在页面上通过 ${itemsCustom.***}接收参数
4、简单类型的数据回显

springmvc不支持简单类型的数据回显,因此直接使用model即可。

model.addAttribute("id",id);





### Spring MVC 中实现修改数据时的表单回显Spring MVC 应用程序中,当需要编辑现有记录并显示当前值给用户以便于修改时,可以利用 `@ModelAttribute` 和 `Model` 对象来完成这一功能。具体来说,在控制器方法内加载实体对象并将其实例添加至模型中,这样视图层就能访问这些信息从而填充输入字段。 对于更新操作而言,流程如下: #### 控制器逻辑 定义一个处理器映射接收 GET 请求以展示预填好的 HTML 表格;此动作会查询数据库取得特定 ID 的条目,并通过设置属性的方式将其加入到 Model 当中供 JSP 或 Thymeleaf 页面读取渲染[^1]。 ```java @GetMapping("/edit/{id}") public String showEditForm(@PathVariable Long id, Model model) { // 假设 service 是注入的服务类实例 User existingUser = userService.findById(id); if (existingUser != null) { model.addAttribute("user", existingUser); // 将找到的对象放入model中 } return "edit"; // 跳转到 edit.jsp 或者其他模板文件 } ``` #### 视图部分(假设使用Thymeleaf) 创建名为 `edit.html` 的页面结构,其中包含必要的 `<form>` 元素及其子组件。为了确保初始状态下各控件已含有来自服务器端的信息,需借助 th:* 属性指定默认文本或选中状态等特性[^3]。 ```html <form action="#" th:action="@{/update}" method="post"> <!-- 隐藏域保存主键 --> <input type="hidden" name="id" th:value="${user.id}"> <label>用户名:</label> <input type="text" name="name" th:value="${user.name}"/> <button type="submit">提交更改</button> </form> ``` #### 处理 POST 提交后的更新业务 编写另一个接受 HTTP POST 方法调用的方法负责捕获客户端发来的参数集合,再经由服务层执行持久化存储的动作。这里同样运用到了 `@ModelAttribute` 来自动装配从前端传过来的数据到对应的 JavaBean 上面。 ```java @PostMapping("/update") public String updateUser(@ModelAttribute User updatedUser){ try{ userService.update(updatedUser); return "redirect:/users"; }catch(Exception e){ // 错误处理... return "error"; } } ``` 上述代码片段展示了如何构建一套完整的 CRUD 功能里的 “U” 即 Update 更新环节里涉及到的前后端交互模式。值得注意的是实际项目可能会更加复杂一些,比如增加校验机制防止非法篡改、优化用户体验设计等方面的工作[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值