Spring MVC控制器之SimpleFormController使用



 SimpleFormController已经在spring3.0及以后的版本中废除,学习没什么实际用处,但是对了解spring框架本身还是有做用的。SimpleFormController顾名思义这个控制器是为了提交表单来设计的。这里主要对test-servlet.xml文件里关于Controller的配制做一下解释。

	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="add_emp.test">addEmpController</prop>
			</props>
		</property>
	</bean>
	<bean id="addEmpController" class="test.EmployeeFormController">
		<property name="commandClass" value="test.Employee"/>
		<property name="formView" value="add_emp"/>
		<property name="successView" value="success"/>
	</bean>

 当前端控制器通过读取web.xml文件中的配制找到配置的后缀扩展,然后把拦截到的请求交给相应的handlerMapping进行处理,在这个程序中,将把相应的请求交给addEmpController来处理,因为是使用的是SimpleFormController,所以这里的配置就比用CommondController简单点,这里只需要一个控制器,而不需要为显示页面与添加完后提交各设置一个控制器。 如下:

 

	<bean id="addEmpController" class="test.EmployeeFormController">
		<property name="commandClass" value="test.Employee"/>
		<property name="formView" value="add_emp"/>
		<property name="successView" value="success"/>
	</bean>

 在这里配置了三个参数,commandClass属性的作用是:进行自动填充,在表单中添加完form提交后,不用手动的从request中取数据,而由spring框架来帮忙完成。formView的作用是:当一个请求是以get的方式提交过来,而不是提交表单的post,Spring框架就会自动解析出用户是要显示表单页面,而不是要提交表单页面,如果是以post方式提交,spring框架就会解析出用户是点击submit按钮提交表单,从而把相应的数据提交给SimpleFormController的实现类来处理,处理完成后就会用到第三个属性:successView,它的配制是为了说明在处理成功后转给那个视图。

例如:http://localhost:8080/test/add_emp.test,注意,这里是在web.xml中配置拦截扩展名为test的请求,如下:

	<servlet>
		<servlet-name>test</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>test</servlet-name>
		<url-pattern>*.test</url-pattern>
	</servlet-mapping>

 

当在浏览器中输入http://localhost:8080/test/add_emp.test后就会显示出添加数据的表单页面,如下图:

  Spring MVC控制器之SimpleFormController使用

 注意这时的表单action为空,并没有添写要提交给那个acion来处理当前的请求,spring会自动的提交给当前的url来处理,及:http://localhost:8080/test/add_emp.test,如下图:

<!--StartFragment -->
  Spring MVC控制器之SimpleFormController使用
 

 注意这里要配制提交的方式为post方式提交,这样spring才能判断出是要交给SimpleFormController来处理。

 

 接下来看一个控制器类EmployeeFormController.java的实现:

public class EmployeeFormController extends SimpleFormController {

	@Override
	protected ModelAndView onSubmit(Object command) throws Exception {
		Employee emp = (Employee) command;
		System.out.println(emp);
		return new ModelAndView(getSuccessView());
	}


	@Override
	protected Map referenceData(HttpServletRequest request) throws Exception {
		Map<String, Object> model = new HashMap<String, Object>();
		model.put("deptList", new String[]{"sales","manage"});
		return model; 
	}


	@Override
	protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
		binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
	}
}

 onSubmit方法,顾名思义知道其是post后所要执行的方法,referenceData方法是为了在页面上显示部门列表来定义的方法,这是引用的一个外部模型。initBinder是为了能正确的把日期进行填充。

 

 

 

 

 

 

 

你可能感兴趣的:(spring,springMVC)