`
lyx_2709
  • 浏览: 316441 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

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

阅读更多
 
用登陆演示
Model-Driven(模型驱动)、配置表单验证
本文主要在上一个视频(webwork初体验)的基本进行改动,所以在看本文之前,请先浏览上一个视频。
webworkAction根据Form的不同可分为二类:
一种是Field-Driven(字段驱动)Action;就是 Action用自己的字段来充当Form的角色,上一个视频给大家演示的例子就是采用了这种方式。本人感觉有点像struts中的动态Form
当然这只是我自己的一些看法。还有一种是Model-Driven(模型驱动)Action。它很像StrutsForm,但在strutsForm必须继承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中的类似。
   要启动表单验证需要增加一个拦截器还有就是我们在strutsstruts-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 代码
  1. <!---->>  
  2. <validators>  
  3.     <field name="userName">  
  4.         <field-validator type="requiredstring">  
  5.             <message>username is required!message>  
  6.         field-validator>  
  7.     field>  
  8.     <field name="userPwd">  
  9.         <field-validator type="requiredstring">  
  10.             <message> password is required!message>  
  11.         field-validator>  
  12.     field>  
  13. 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了。好用了。呵呵,刚是太急用了,忘了最关键的一步。大家在开发当中可以细心点啊。
因为,录这个视频是在公司,不能有声音讲解给大家听。请大家谅解。这段时间比较忙,过了这段时间,给大家录个有声音的。呵呵。
我的联系方式:
Email:Lyx_happy@163.com
就到这里吧。希望大家能多提宝贵意见!
分享到:
评论
11 楼 lere 2008-07-10  
太感谢了,特意注册个用户来献上敬意
10 楼 t8500071 2008-05-14  
我也正在学..多谢
9 楼 104644885 2007-07-30  
我要的就是这中教学,有代码,老师还一步步演示,文档写的好,那里需要修改有红色的标记,一目了然
8 楼 horror 2007-05-31  
要多多的哦,谢谢老师
7 楼 wangpangzi 2007-05-20  
感谢老大,好人啊,学习 
6 楼 heipark 2007-04-27  
看了几集,写的不错。我是和拿你的视频和webwork in action一块看的。效果不错。
5 楼 tanghaiyu 2007-04-03  
谢谢楼主 好人啊  可就是下载解压不了 为什么啊 ?
4 楼 kiss.988 2007-03-24  
我下了,看后感觉非常好。谢谢老师!
3 楼 lyx_2709 2007-03-02  
justcode     17 小时前
鄙视光看不回的人!

多谢支持!

2 楼 zhouwei 2007-03-02  
ding~
1 楼 justcode 2007-03-02  
鄙视光看不回的人!

相关推荐

    详谈Angular 2+ 的表单(一)之模板驱动型表单

    Angular提供了两种处理表单的方式:模板驱动型表单(Template Driven Forms)和模型驱动型表单(Model Driven Forms,也称为响应式表单)。本篇文章将重点探讨模板驱动型表单。 模板驱动型表单的原理是将表单指令...

    webwork教程

    WebWork通过使用拦截器(Interceptor)和动态方法调用来增强Action的功能,提供了强大的表单验证、国际化支持以及错误和异常处理机制。 **WebWork 安装 - HelloWorld** 安装WebWork通常涉及以下几个步骤: 1. 下载...

    Angularjs 动态添加表单

    AngularJS的核心是数据模型驱动(Model-Driven)的开发模式。通过`ng-model`指令,我们可以将表单控件与应用程序的数据模型进行绑定。当表单字段增加时,相应的模型也会自动更新,反之亦然。这样,我们就能够轻松地...

    AngularJS-Event-Driven-Architecture:AngularJS 事件驱动架构

    6. ** ng-model** 和 ng-change:`ng-model` 指令用于将表单控件与模型绑定,而 `ng-change` 可以在模型值改变时触发一个回调函数。这在处理表单提交或实时验证时非常有用。 7. **事件传播和阻止默认行为**:...

    webwork学习笔记

    - 模型驱动,通过模型对象来封装数据,更灵活,适合复杂场景。 #### 四、ActionContext与ServletActionContext - **ActionContext**: - **定义**: 提供对Action执行期间可用的数据结构访问。 - **包含信息**: ...

    struts2的驱动和防止重复提交

    **模型驱动**(Model Driven)则将字段属性和业务逻辑分开。一个独立的JavaBean,如`User`类,负责存储属性,而Action类仅作为控制器,通过实现`ModelDriven`接口来引用这个JavaBean。这样,Action类可以保持轻量级...

    模型驱动开发工具的自动化测试技术研究.pdf

    模型驱动开发(Model Driven Development, MDD)是一种先进的软件开发方法,它强调将软件的逻辑和结构模型作为开发的核心,而不是直接编写源代码。在MDD中,开发者使用建模语言来描述软件的行为和结构,然后通过模型...

    Angular2表单自定义验证器的实现

    Angular2提供了两种表单处理方式:模板驱动(Template-driven)和模型驱动(Model-driven,也称为Reactive Forms)。本文将关注模型驱动的表单,因为它们更适合于复杂的表单场景,并提供了更强大的功能,如可复用的...

    WebWork简明教程

    - **Model-Driven Action**:依赖模型驱动,适用于复杂业务逻辑。 - **上下文管理**: - **ActionContext**:存储与当前Action相关的数据,如请求参数、会话状态等。 - **ServletActionContext**:提供与Servlet...

    webwork2.0参考资料

    - Model-Driven Action: 基于模型驱动, 表单数据映射到一个模型对象, 该对象由Action类管理。 - **示例**: - 用户注册: 创建一个包含用户名、密码等字段的Action类, 处理用户提交的数据, 执行数据库插入操作。 ##...

    struts2知识总结.txt

    - 使用模型驱动(Model-Driven)方式时,需要实现`ModelDriven`接口并重写`getModel()`方法,以返回模型对象供框架使用。 - 在URL参数中可以通过`getter`/`setter`方法传递值,例如:`/action?field=value`或`/...

Global site tag (gtag.js) - Google Analytics