表单控制器SimpleFormController

来源:互联网 发布:js array slice 编辑:程序博客网 时间:2024/04/28 13:06

SimpleFormController可以自动将用户从表单获取的参数存入一个JavaBean的实例中,这样就不用逐一调用request.getAttribute()方法去获取,下面通过一个例子来讲解。

【示例23-6】该示例按照编程步骤创建表单控制器。首先,创建用于用户提交表单的页面simplelogin.jsp,代码如下:

  1. <%@page contentType="text/html;charset=UTF-8"%>  
  2. <html>   
  3. <head><title>登录</title></head>   
  4. <body>   
  5.     请输入登录信息:<form action="simplelogin.do" method="post">  
  6.    <br>用户名:<input type=text name=userName>  
  7.    <br>密码:<input type=password name=password>  
  8.    <br><input type=submit name=submit>  
  9.    </form>  
  10. </body>   
  11. </html> 

可以看出该页面把请求提交给simplelogin.do去处理。下面看LoginBean.java的代码,如下所示。

  1. package com.examp.ch23;  
  2. public class LoginBean {  
  3.     private String userName;            //该属性用于获取表单中的userName参数  
  4.     private String password;            //用于获取表单中的password参数  
  5.     public String getUserName(){  
  6.         return userName;  
  7.     }  
  8.     public void setUserName(String userName){  
  9.         this.userName = userName;  
  10.     }  
  11.     public String getPassword(){  
  12.         return this.password;  
  13.     }  
  14.     public void setPassword(String password){  
  15.         this.password = password;  
  16.     }  

可以看出,该文件有两个属性userName和password,并且每个属性都有getter和setter方法。使用SimpleFormController、Spring MVC框架可以自动将表单的参数与该类的属性进行名字匹配,然后把参数值赋给属性。这样在控制器中就可以调用LoginBean的实例去获取表单参数。下面是SimpleLoginController.java,它实现了SimpleFormController接口,代码如下:

  1. package com.examp.ch23;  
  2. import Java.util.HashMap;  
  3. import Java.util.Map;  
  4. import org.apache.log4j.Logger;  
  5. import org.springframework.web.servlet.ModelAndView;  
  6. import org.springframework.web.servlet.mvc.SimpleFormController;  
  7.  
  8. public class LoginController extends SimpleFormController{  
  9.                                         //继承SimpleFormController类  
  10.     private Logger logger = Logger.getLogger(this.getClass().getName());  
  11.     private String viewPage;      
  12.     protected ModelAndView onSubmit(Object command)  
  13.                                         //在onSummit()方法中处理用户请求  
  14.      throws Exception {  
  15.         LoginBean loginbean = (LoginBean)command;  
  16.         Map model = new HashMap();  
  17.         model.put("userName", loginbean.getUserName());  
  18.                                         //将loginbean中的userName存入model  
  19.         ModelAndView mv = new ModelAndView(getViewPage(),model);  
  20.         return mv;  
  21.     }  
  22.     public void setViewPage(String viewPage){   //调用该方法给属性viewPage赋值  
  23.         this.viewPage = viewPage;  
  24.     }  
  25.     public String getViewPage(){        //调用该方法获取viewPage属性  
  26.         return this.viewPage;  
  27.     }  

可以看出在该类的onSummit()方法中对simplelogin.jsp的请求进行处理。首先通过LoginBean的实例userbean获取表单参数,把它存入model,然后调用getViewPage获取配置文件中定义的返回页面去显示。下面看配置文件,代码如下:

  1. <bean id="urlMapping" class="org.springframework.web.servlet.handler.Simp-  
  2. leUrlHandlerMapping">  
  3.         <property name="mappings">  
  4.             <props>  
  5.                 <prop key="helloWorld.do">helloWorldAction</prop>  
  6.                 <!--为simpleLoginController 创建映射-->  
  7.                   <prop key="simplelogin.do">simpleLoginController</prop>     
  8.             </props>  
  9.         </property>  
  10. </bean>   
  11.  
  12. <bean id="simpleLoginController" class="com.examp.ch23.SimpleLoginController">  
  13.     <property name="viewPage">  
  14.         <value>simpleWelcomeView</value>    <!--viewPage属性用于指定返回的视图-->  
  15.     </property>  
  16.     <!--commandClass属性用于指定存储表单参数的JavaBean类-->  
  17.     <property name="commandClass">  
  18.         <value>com.examp.ch23.LoginBean</value>   
  19.     </property>  
  20. </bean> 

可以看出,上面代码在配置文件中给LoginController建立映射simplelogin.do,并给SimpleLoginController的属性赋值。viewPage的值为simpleWelcomeView,它对应于simplewelcome.jsp。commandClass的类型为LoginBean,在SimpleLoginController中该属性通过onSummit()方法的参数传入。下面是simplewelcome.jsp的代码:

  1. <%@page contentType="text/html;charset=UTF-8"%>  
  2. <html>   
  3. <head><title>登录成功</title></head>   
  4. <%  
  5. String str = (String)request.getAttribute("userName");  
  6. %>  
  7. <body>   
  8.    <h1>欢迎您!<%=str%></h1>  
  9. </body>   
  10. </html> 

最后在浏览器中输入http://localhost:8080/ch23/ simplelogin.jsp,返回的结果如图23-4所示。

 图23-4  simplewelcome.jsp效果图可以看出,simplewelcome.jsp获取了userName的值,然后把它显示在页面上。
0 0