Model-Driven(模型驱动)、配置表单验证

 
用登陆演示 Model-Driven(模型驱动) 、配置表单验证
本文主要在上一个视频(webwork初体验)的基本进行改动,所以在看本文之前,请先浏览上一个视频。
webwork Action 根据 Form 的不同可分为二类:
一种是 Field-Driven (字段驱动) Action ;就是 Action 用自己的字段来充当 Form 的角色,上一个视频给大家演示的例子就是采用了这种方式。本人感觉有点像 struts 中的动态 Form
当然这只是我自己的一些看法。还有一种是 Model-Driven (模型驱动) Action 。它很像 Struts Form, 但在 struts Form 必须继承 org.apache.struts.action.ActionForm; 或是 org.apache.struts.validator 包下的几个 Form. WebWork 中有所不同,只要普通 JavaBean 就可以充当模型部分 。只要我们在 Action 中实现 com.opensymphony.xwork. ModelDriven 接口就可以了,它有一个方法: Object getModel(); ,这个方法用于返回模型对象。
我们改动上个视频的 LoginAction 类。代码如下:
java 代码
  1. package com.lyx.web.action;   
  2. import com.lyx.bo.User;   
  3. import com.opensymphony.xwork.Action;   
  4. import com.opensymphony.xwork.ActionSupport;   
  5. import com.opensymphony.xwork.ModelDriven;   
  6. public class LoginAction implements Action,ModelDriven {   
  7. //注意这里的User一定要初始化   
  8.     private User user=new User();   
  9.   
  10.     public User getUser() {   
  11.         return user;   
  12.     }   
  13.     public String execute() throws Exception {   
  14.         if(user.getUserName().equals("lyx")){   
  15.             return this.SUCCESS;   
  16.         }else{   
  17.             return this.ERROR;   
  18.         }   
  19.     }   
  20.     public Object getModel() {   
  21.         // TODO Auto-generated method stub   
  22.         return user;   
  23.     }   
  24.   
  25. }  
红色字体部是我们后加部分。
然后我们就可以将 index.jsp 页面的代码修改如下:
< form action = "login.action" >
 
username: < input type = "text" name = "userName" />
password: < input type = "password" name = "userPwd" />
< input type = "submit" value = "login" />
form>
也就是我们去掉了原有的表达式语言。
然后我们修改xwork.xml配置文件如下:
xml 代码
  1. >  
  2. <xwork>  
  3.     <include file="webwork-default.xml" />  
  4.     <package name="default" extends="webwork-default">  
  5.         <action name="login" class="com.lyx.web.action.LoginAction">  
  6.               
  7.             <result name="success" type="dispatcher">  
  8.                 <param name="location">/success.jspparam>  
  9.             result>  
  10.               
  11.             <result name="error" type="dispatcher">  
  12.                 <param name="location">/error.jspparam>  
  13.             result>  
  14.             <interceptor-ref name="model-driven"/>  
  15.             <interceptor-ref name="params"/>  
  16.         action>  
  17.     package>  
  18. xwork>  
也就是在原有的基础上加了一行模型驱动的拦截器。作用就是将模型对象保存到值堆栈中。
就样就OK了。 这里要注意, model-driven 拦截器要在 params 的上面。可以测试一下看看。
整过过程,非常像struts中,Action与ActionForm的关系。
通过测试,功能和以前的一样。很简单吧。就不在多述了。
第二个重点我们来配置一个表单的验证:
在 src 目录下新建 validators.xml 文件,文件内容如下:
xml 代码
  1. <validators>  
  2.     <validator name="required" class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator"/>  
  3.     <validator name="requiredstring" class="com.opensymphony.xwork.validator.validators.RequiredStringValidator"/>  
  4.     <validator name="int" class="com.opensymphony.xwork.validator.validators.IntRangeFieldValidator"/>  
  5.     <validator name="date" class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator"/>  
  6.     <validator name="expression" class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/>  
  7.     <validator name="fieldexpression" class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/>  
  8.     <validator name="email" class="com.opensymphony.xwork.validator.validators.EmailValidator"/>  
  9.     <validator name="url" class="com.opensymphony.xwork.validator.validators.URLValidator"/>  
  10.     <validator name="visitor" class="com.opensymphony.xwork.validator.validators.VisitorFieldValidator"/>  
  11.     <validator name="conversion" class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/>  
  12.     <validator name="stringlength" class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/>  
  13. validators>  
这个文件可以在网上下得到。也可以在 webwork 的源码中得到。不是不想起了 struts 中有个 valiator-rules.xml 文件。这个文件在 struts 中是描述着验证的规则,里面有好多已经写好了的验证,我们可以很方便的调用。这里的这个文件功能和 struts 中的类似。
   要启动表单验证 需要增加一个拦截器 还有就是我们在 struts struts-config.xml 配置文件中Action的配置有个input属性,它是用来当验证失败时所在跳到的页,在这里如果登陆失败我们应该跳到index页,显示失败的原因,重新登陆。在webwork中我们也用input来描述这个功能。在一个result.
xwork.xml 文件进行修改 增加 < interceptor-ref name = " validationWorkflowStack " />
修改后 xwork.xml 代码如下:
xml 代码
  1. <include file="webwork-default.xml" />  
  2.     <package name="default" extends="webwork-default">  
  3.         <action name="login" class="com.lyx.web.action.LoginAction">  
  4.               
  5.             <result name="success" type="dispatcher">  
  6.                 <param name="location">/success.jspparam>  
  7.             result>  
  8.               
  9.             <result name="error" type="dispatcher">  
  10.                 <param name="location">/error.jspparam>  
  11.             result>  
  12.             <result name="input" type="dispatcher">  
  13.                 <param name="location">/index.jspparam>  
  14.             result>  
  15.                
  16.             <interceptor-ref name="model-driven"/>  
  17.             <interceptor-ref name="params"/>  
  18.             <interceptor-ref name="validationWorkflowStack" />  
  19.         action>  
  20.     package>  
我们已经用到了 success ,他指成功所要跳到的页。 Error 是错误所要跳到的页。 Input 是指失败时所要返回来登陆的页。在 webwork 中还有几个。以后我们会看得到,用到的时候在详细讲解。
   建立验证规则
 
      LoginAction 进行验证规则的配置 需要新建一个配置文件 文件名起名是以 Action 的名称开头以 validation 结尾,中间用 - 隔开.xml 并保存到 LoginAction.java 文件所在的目录中
        
   代码如下: LoginAction-validation.xml
xml 代码
>   <validators>       <field name="userName">           <field-validator type="requiredstring">               <message>username is required!message>           field-validator>       field>       <field name="userPwd">           <field-validator type="requiredstring">               <message> password is required!message>           field-validator>       field>   validators>  
这个文件很像 struts 中的 validation.xml 。功能和他是一样的。配置表单的验证。这里我们只验证也用户名和密码为必须填写。注意:这个 name 的属性一定要和 User 类中的对应。规则是和 struts 中一样的。对应才能有交的验证。
为了能显示验证的信息再次修改 index 页面如下:
< ww:form  action = "login.action" method = "POST" >
         username:   < ww:textfield label = "Username" name = "userName" required = "true" />
          password:  < ww:password label = "Password" name = "userPwd" required = "true" />
            < ww:submit value = "Submit" />
     ww:form>
这几行很简单,从字面上就可以看出,就不在多述了。
基本代码就这些,测试一下,看看吧。
哦,没有验证,还忘了一步,回头看看
除了上述的配置外,我们的 Action 还要继承 ActionSupport类,这个类存放着错误的信息,并能将错误的状态返回到页面
在改一下,试试
OK了。好用了。呵呵,刚是太急用了,忘了最关键的一步。大家在开发当中可以细心点啊。
因为,录这个视频是在公司,不能有声音讲解给大家听。请大家谅解。这段时间比较忙,过了这段时间,给大家录个有声音的。呵呵。
我的联系方式:
MSN;Lyx_2709@hotmail.com
Email:Lyx_happy@163.com
就到这里吧。希望大家能多提宝贵意见!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值