快速业务通道

Spring MVC的表单控制器 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18

Spring MVC的表单控制器

时间:2011-03-14 陈雄华

概述

大多数Web应用都会遇到需要填写表单的页面,当表单提交成功后,表单的数据被传送给Web服务器中处理。处理成功后导向到一个成功页面,如果操作失败则导向到一个错误报告页面。此外,在表单数据处理之前还会进行表单数据的验证,保证客户端提交的表单数据是合法有效的,如果数据不合法,请求返回到原表单页面中,以便用户根据错误信息进行修改。

假设你想成为论坛的用户时,必须填写一张用户注册表单,这可能包括用户名、密码、Email等注册信息。用户提交表单后,服务器验证注册数据合法性,如果你填写的信息是合法的,系统将在数据库中创建一个新用户,用户注册就完成了。

用户注册表单控制器

通过扩展SimpleFormController可以按照标准的表单处理流程处理用户注册的请求,UserRegisterController用于负责处理用户注册的请求:

代码清单 1 UserRegisterController

package com.baobaotao.web.user; import org.springframework.web.servlet.mvc.SimpleFormController; import com.baobaotao.domain.User; import com.baobaotao.service.BbtForum; public class UserRegisterController extends SimpleFormController { private BbtForum bbtForum; public UserRegisterController(){ setCommandClass(User.class); ①指定命令对象(这时也称表单对象)的类型 } public void setBbtForum(BbtForum bbtForum) { this.bbtForum = bbtForum; } ②通过该方法处理表单提交请求 protected void doSubmitAction(Object command) throws Exception { User user = (User) command; bbtForum.registerUser(user); } }  在①处指定表单对象的类型,以便控制器自动将表单数据绑定到表单对象中,你也可以直接在配置文件中通过commandClass属性进行设置:

<property name="commandClass" value=" com.baobaotao.domain.User"/>

在②处复写了doSubmitAction()方法,在该方法内部通过调用业务层的bbtForum保存表单对象,创建新用户。当你不需要返回模型对象给成功页面时,复写doSubmitAction()方法是最佳的选择,因为该方法没有返回值。如果需要返回模型对象给成功页面,那么就必须复写表单控制器的onSubmit ()方法。用户注册成功后,我们一般需要在成功页面中根据用户信息提供个性化的内容,这就要求控制器返回相应的User模型对象,此时需要在UserRegisterController中复写onSubmit ()方法:

… protected ModelAndView onSubmit (Object command, BindException errors) throws Exception { User user = (User) command; bbtForum.registerUser(user); return new ModelAndView(getSuccessView(), "user", user);①user中包含注册用户的信息 } …

当你复写onSubmit ()方法后,doSubmitAction()方法就不会得到执行了, onSubmit ()方法比doSubmitAction()方法具有更高的调用优先级,所以你只要根据要求复写两者中的一个方法就可以了。在onSubmit ()中返回的ModelAndView的逻辑视图名应该是通过表单控制器的successView属性指定而不应该硬编码,所以在①处我们通过getSuccessView()获取这个配置值。

表单控制器的工作流程从表单页面提交开始,处理成功后转向成功页面,这个流程涉及到两个视图:表单页面和成功页面,这需要在表单控制器中通过属性进行定义:

<bean name="/registerUser.html" class="com.baobaotao.web.user.UserRegisterController"> <property name="bbtForum" ref="bbtForum" /> <property name="formView" value="register&quo

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号