Spring MVC(五)封装表单参数的控制器(FormController)

a.新建一个表单控制器EmpFormController继承extends SimpleFormController,并实现onSubmit方法

表单控制器的流程较复杂

和前面命令控制器的区别是表单控制器里面的onSubmit方法需要有Post方式提交才能执行到,Get方法不行

//可以处理表单流程
public class EmpFormController extends SimpleFormController
{

    protected ModelAndView onSubmit(Object command) throws Exception
    {
        Emp emp=(Emp)command;
        System.out.println(emp);
        return new ModelAndView("success");
    }
}


public class EmpFormController extends SimpleFormController
{

    //当用get请求时,绑定的模型就会发送到页面上来.
    protected Map referenceData(HttpServletReqest request) throws Exception
    {
        Map<String,Object> model=new HashMap<String,Object>();
        model.put("deptList",new String[]{"sales","manage"});
        return model;
    }

    protected ModelAndView onSubmit(Object command) throws Exception
    {
        Emp emp=(Emp)command;
        System.out.println(emp);
        return new ModelAndView("success");
    }
}

b.使用formController只需一个提交路径不像上面的命令控制器需要2个

test-servlet.xml中修改
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="add_emp.do">addEmpController</prop>
        </props>
    </property>
</bean>

<bean id="addEmpController" class="com.yw.controller.EmpFormController">
        <property name="commandClass" value="com.yw.controller.Emp" />
        <property name="formView" value="add_emp" />
        <property name="successView" value="success" />
</bean>


完整的xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
				http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
				http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	<!--HandleMapping根据 用户发出start.do的请求 找到对应的控制器Controller进行处理 -->
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<!-- <prop key="start.do">startController</prop> -->
				<!-- 发送login.do的请求,转到loginController控制器 ,该控制器返回login视图名 -->
				<!-- <prop key="login.do">loginController</prop> <prop key="login2.do">loginController2</prop> -->
				<prop key="add_emp.do">addEmpController</prop>
				<!-- <prop key="add_success.do">addEmpSuccessController</prop> -->
			</props>
		</property>
	</bean>

	<!-- 控制器的实现类以及包 -->
	<!-- <bean id="startController" class="com.yw.controller.StartController"></bean> -->

	<!-- <bean id="loginController" class="org.springframework.web.servlet.mvc.ParameterizableViewController">  -->
		<!-- <property name="viewName" value="login"></property>--> 
	<!--</bean> -->

	<!-- <bean id="loginController2" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"></bean> -->

	<!-- <bean id="addEmpController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"></bean> -->
	<!--	<bean id="addEmpSuccessController" class="com.yw.controller.EmpContoller"></bean> -->
	<!--	<bean id="addEmpSuccessController" class="com.yw.controller.EmpContoller2"> -->
	<!--	<property name="commandClass" value="com.yw.controller.Emp"></property> </bean> -->

	<bean id="addEmpController" class="com.yw.controller.EmpFormController">
		<property name="commandClass" value="com.yw.controller.Emp" />
		<property name="formView" value="add_emp" />
		<property name="successView" value="success" />
	</bean>

	<!-- 视图解析器 加前缀和后缀,隐藏jsp,放在web-inf目录, -->
	<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
		<!-- viewResovle view 需要加,否则报错国际化时使用JstlView -->
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView"></property>
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>


</beans>


 

c.在Emp类里面添加一个属性String dept部门在页面add_emp.jsp选择一个部门department:<select name="dept">            <option>a</option>            <option>b</option>            </select>a b应该是数据库返回的需要一个模型的部门列表model.deptListdepartment:<select name="dept">    <c:forEach items="${deptList}" var="dept">        <option value="${dept}">${dept}</option>    </c:forEach></select>
<form action="" method="post">
     name:<input type="text" name="name">
    phone:<input type="text" name="phone">
    birthday:<input type="text" name="birthday">
    department:<select name="dept">
        <c:forEach items="${deptList}" var="dept">
            <option value="${dept}">${dept}</option>
        </c:forEach>
    </select>
</form>   
              
form的action为空,因为从哪里进来还回到哪里去            
            
和前面一样因为有日期格式所以需要覆盖baseController中的initBinder
    protected void initBinder(HttpServletRequest request,
            ServletRequestDataBinder binder) throws Exception
    {
        binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
    }            






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值