关闭

SimpleFormController类別

516人阅读 评论(0) 收藏 举报

Spring附有一些简单的窗体处理handler,这些handler都实现了Controller接口,您可以使用这些类别,让它自动为您收集窗体参数并填入窗体对象(form object),而无需您亲自处理这些细节。
 
   org.springframework.web.servlet.mvc.SimpleFormController是Spring提供的一个 Controller接口实现,以下实现一个窗体登入程序,以示范SimpleFormController的作用,首先我们先设计一个 form.jsp: 

<% @page contentType = " text/html;charset=Big5 " %>
< html >
< head >< title > Login </ title ></ head >
< body >
    请输入使用者名称与密码:
< p >
    
< form name = " loginform "  action = " /springapp/login.do "  method = " post " >
        名称 
< input type = " text "  name = " username " />< br >
        密码 
< input type = " password "  name = " password " />< br >
        
< input type = " submit "  value = " 确定 " />
    
</ form >
    注意:输入错误会再回到这个页面中。
</ body >
</ html >

窗体中传递两个参数username与password,注意method是post,这样待会Spring才会将我们的参数填入窗体对象中。先看看我们的LoginAction:
 
LoginAction.java

package  onlyfun.caterpillar;

import  org.springframework.web.servlet.mvc.SimpleFormController;
import  org.springframework.web.servlet. * ;

public   class  LoginAction  extends  SimpleFormController  {
    
//  重载父类onSubmit方法
     protected  ModelAndView onSubmit(Object command)  throws  Exception  {
       LoginForm form 
=  (LoginForm) command;

       
if ( " caterpillar " .equals(form.getUsername())  &&   " 123456 " .equals(form.getPassword()))  {
          
return   new  ModelAndView( this .getSuccessView(), " user " , form.getUsername());
       }
else   {
           
return   new  ModelAndView( this .getFormView());
       }

    }

}

   LoginAction继承了SimpleFormController,并重新定义其onSumit()方法,Spring会呼叫这个方法, onSumit()接收command对象,这个对象代表了窗体对象,onSumit()有几个不同的版本,这边所使用的是最简单的版本,您可以看看 API文件了解它的其它版本。

  getSuccessView()与getFormView()是SimpleFormController中定义的两个方法,分别表示通过验证与物败的目标网页,我们待会可以直接在Bean定义档中定义,先来看看窗体对象,它只是个简单的JavaBean:
 
LoginForm.java :

package  onlyfun.caterpillar;

public   class  LoginForm  {
    
private  String username;
    
private  String password;

    
public   void  setUsername(String username)  {
       
this .username  =  username;
    }


    
public   void  setPassword(String password)  {
       
this .password  =  password;
    }


    
public  String getUsername()  {
       
return  username;
    }


    
public  String getPassword()  {
       
return  password;
    }

}

  Spring会收集Request中相关的参数,并将之填入有对应到的属性,至于LoginAction如何得到command,这我们要在Bean定义档中撰写: 

<? xml version = " 1.0 "  encoding = " UTF-8 " ?>
<! DOCTYPE beans PUBLIC  " -//SPRING/DTD BEAN/EN "   " http://www.springframework.org/dtd/spring-beans.dtd " >
< beans >
    
< bean id = " urlMapping "   class = " org.springframework.web.servlet.handler.SimpleUrlHandlerMapping " >
        
< property name = " mappings " >
            
< props >< prop key = " /login.do " > loginAction </ prop ></ props >
        
</ property >
    
</ bean >

    
< bean id = " viewResolver "   class = " org.springframework.web.servlet.view.InternalResourceViewResolver " >
        
< property name = " viewClass " >
            
< value > org.springframework.web.servlet.view.InternalResourceView </ value >
        
</ property >
        
< property name = " prefix " >< value >/ WEB - INF / jsp /</ value ></ property >
        
< property name = " suffix " >< value > .jsp </ value ></ property >
    
</ bean >

    
< bean id = " loginAction "   class = " onlyfun.caterpillar.LoginAction " >
        
< property name = " commandClass " >< value > onlyfun.caterpillar.LoginForm </ value ></ property >
        
< property name = " successView " >< value >/ WEB - INF / jsp / success.jsp </ value ></ property >
        
< property name = " formView " >< value >/ html / form.htm </ value ></ property >
    
</ bean >
</ beans >

  在loginAction中的commandClass,即使定义它所要使用的窗体对象,注意我们也定义了successView与formView,其中我们的success.jsp如下: 

< html >
< head >< title > Login Success </ title ></ head >
< body >
    
< H1 >  Hello, $ {user} !!</ H2 >
    This is your secret gift.
</ body >
</ html >


  登入成功的话,会进入success.jsp并显示使用者的名称,登入失败的话,依formView的设定,会回到原来的登入窗体。

 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:109658次
    • 积分:1427
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:116篇
    • 译文:0篇
    • 评论:18条
    最新评论