快速业务通道

使用Spring MVC表单标签 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
;_favorites"/>literature </form>

大家可能已经注意到每个复选框组件的后台都跟着一个隐藏组件,这是因为当HTML页面中的复选框没有被选中时,这个复选框的值不会在表单提交时作为HTTP请求参数发送到服务器端,这给Spring的表单数据绑定造成了麻烦——因为无法触发setFavorites()方法的调用(如果原来已经有值,这个值不会被设置为空)。解决方法就是在每个复选框后面加一个隐藏组件,并且将对应的复选框名字前添加一个下划线("_")作为隐藏组件的名字。这样一来,你相当于告诉Spring“这个表单中存在这样一个复选框,我希望表单对象中对应的属性和这个checkbox的状态保持一致”。

假设复选框对应的选项在数据库或配置文件中定义,那么页面复选框标签就不能通过硬编码的方式指定,相反必须根据配置的选项数据动态产生。对于这样的需求,代码清单 2的编写方式显然不能满足需求。回忆一下表单控制器的工作流程,我们知道可以通过复写referenceData()方法在表单显示前准备一些需要的数据,现在终于派上用场了,来看一下具体的实现:

代码清单 3 UserRegisterController:准备表单显示数据

package com.baobaotao.web.user; … import org.springframework.ui.ModelMap; public class UserRegisterController extends SimpleFormController { private BbtForum bbtForum; ①创建初始表单对象 protected Object formBackingObject(HttpServletRequest request) throws Exception { int userId = ServletRequestUtils.getIntParameter(request, "userId",-1); User user = bbtForum.getUser(userId); user.setUserName("tom"); List favorites = new ArrayList();①-1默认选中值为1和3的选项 favorites.add("1"); favorites.add("3"); user.setFavorites(favorites); return user; } @Override ②准备表单显示时需要的数据 protected Map referenceData(HttpServletRequest request) throws Exception { Map favoriteMap = new LinkedHashMap(); favoriteMap.put("1", "computer"); favoriteMap.put("2", "sport"); favoriteMap.put("3", "entertainment"); favoriteMap.put("4", "literature"); ②-1将表单页面需要的对象以ModelMap返回,最终将以属性名值对方式出现在请求属性中 return new ModelMap().addObject("favoriteMap", favoriteMap); } @Override protected ModelAndView onSubmit(Object command, BindException errors) throws Exception { User user = (User) command; bbtForum.registerUser(user); return new ModelAndView(getSuccessView(), "user", user); } }

使用Spring MVC表单标签(4)

时间:2011-02-22 陈雄华

在以上代码中我们覆盖了SimpleFormController的referenceData()和formBackingObject ()方法。参照《Spring MVC的表单控制器》中(http://tech.it168.com/j/2007-07-26/200707261434046.shtml)介绍的表单控制器工作流程,可以知道formBackingObject()方法用于表单页面初始化时使用的表单对象。我们在formBackingObject()方法中,将User的favorites属性的初始值设置为1和3(分别对应computer和entertainment的选项),如①所示。

在②处,我们覆盖了referenceData()方法,该方法为表单页面准备一些数据。该方法返回值类型为Map,该Map的键值将会绑定到请求的属性中。ModelMap是Spring 2.0新增的Map实现类,它提供了链式方法和默认键值的机制。这里,我们使用ModelMap绑定了一个键

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号