`
wobu20
  • 浏览: 5663 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

T4.1.2局部刷新、校验代理与表单提交

阅读更多

我在实现这样一个功能的时候,出现了一些问题。

功能:在输入框失去焦点的时候,触发一个事件,进行对输入框值的验证,返回验证结果,显示在一个Insert中,局部刷新Insert组件,并将错误信息添加到校验代理对象中(ValidationDelegate)。

详细代码如下:

Home.html:

xml 代码
  1. <html jwcid="@Shell" title="test">  
  2. <body jwcid="@Body">  
  3.    <span jwcid="hasErrors">  
  4.       <strong><span jwcid="error">span>strong>  
  5.    span>  
  6.    <form jwcid="testForm">  
  7.    <table border="1" align="center">  
  8.       <tr>测试tr>  
  9.       <tr>  
  10.       <tr>  
  11.           <td align="right">电子邮箱:td>  
  12.           <td align="left"><span jwcid="email">span>  
  13.               <span jwcid="emailInfo@Insert" value="ognl:emailMsg" inherit-informal-parameters="yes" id="emailInfo" renderTag="true">span>  
  14.           td>  
  15.       tr>  
  16.       <input type="submit" value="提交"/>    <input type="reset" value="重置"/>  
  17.    table>  
  18.    form>  
  19. body>  
  20. html>  

Home.page

xml 代码
  1. <!---->xml version="1.0" encoding="gb2312"?>  
  2.   
  3. <!---->
  4.   "-//Apache Software Foundation//Tapestry Specification 4.0//EN"    
  5.   "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">  
  6.   
  7. <page-specification>  
  8.        
  9.     <component id="testForm" type="Form">  
  10.         <binding name="listener" value="listener:onSubmit"/>  
  11.         <binding name="delegate" value="beans.delegate"/>  
  12.     component>  
  13.        
  14.     <bean name="delegate" class="org.apache.tapestry.valid.ValidationDelegate"/>  
  15.        
  16.     <component id="hasErrors" type="If">  
  17.         <binding name="condition" value="beans.delegate.hasErrors"/>  
  18.     component>  
  19.        
  20.     <component id="error" type="Delegator">  
  21.         <binding name="delegate" value="beans.delegate.firstError"/>  
  22.     component>  
  23.   
  24.     <component id="email" type="TextField">  
  25.         <binding name="value" value="email"/>  
  26.         <binding name="validators" value="validators:required"/>  
  27.         <binding name="displayName" value="literal:电子邮箱"/>  
  28.     component>  
  29. page-specification>  

Home.java:

java 代码
  1. package com.fruit.tapestry.page;   
  2.   
  3. import org.apache.tapestry.annotations.EventListener;   
  4. import org.apache.tapestry.annotations.InitialValue;   
  5. import org.apache.tapestry.event.PageBeginRenderListener;   
  6. import org.apache.tapestry.event.PageEvent;   
  7. import org.apache.tapestry.form.IFormComponent;   
  8. import org.apache.tapestry.html.BasePage;   
  9. import org.apache.tapestry.services.ResponseBuilder;   
  10. import org.apache.tapestry.valid.ValidationConstraint;   
  11. import org.apache.tapestry.valid.ValidationDelegate;   
  12.   
  13. public abstract class Home extends BasePage implements PageBeginRenderListener {   
  14.        
  15.     /*  
  16.      * 初始化出错信息组件的值为:" ",不初始化的话,无法局部刷新这个组件,不懂为什么...  
  17.      */  
  18.     @InitialValue("literal: ")   
  19.     public abstract String getEmailMsg();   
  20.        
  21.     public abstract void setEmailMsg(String emailMsg);   
  22.        
  23.     public abstract String getEmail();   
  24.        
  25.     public abstract ResponseBuilder getBuilder();   
  26.        
  27.     /**  
  28.      * 字段reflush用来判断是局部刷新或者是提交表单,  
  29.      * 提交表单时触发pageBeginRender方法,重新给reflush赋值  
  30.      */  
  31.     private boolean reflush;   
  32.        
  33.     public boolean getReflush(){   
  34.         return reflush;   
  35.     }   
  36.        
  37.     public void setReflush(boolean reflush){   
  38.         this.reflush=reflush;   
  39.     }   
  40.        
  41.     public void pageBeginRender(PageEvent event)   
  42.     {   
  43.         this.setReflush(false);   
  44.     }   
  45.        
  46.     /**  
  47.      * 判断用户邮箱是否已被占用,输入框失去焦点时触发  
  48.      *  
  49.      */  
  50.     @EventListener(events = "onblur", targets = "email")   
  51.     public void checkEmail(){   
  52.         this.setReflush(true);   
  53.         ValidationDelegate delegate = (ValidationDelegate)this.getBeans().getBean("delegate");   
  54.         System.out.println("delegate.isInError="+(delegate.getFirstError()));   
  55.         String email=getEmail();   
  56.         this.setEmailMsg(" ");   
  57.         System.out.println(email);   
  58.         if(email==null)   
  59.         {   
  60.             System.out.println("邮箱为空!");   
  61.             delegate.setFormComponent((IFormComponent)getComponent("email"));   
  62.             delegate.record("邮箱为空!",ValidationConstraint.CONSISTENCY);   
  63.             this.setEmailMsg("邮箱为空!");   
  64.             getBuilder().updateComponent("emailInfo");   
  65.             return;   
  66.         }   
  67.         if(email.split("@").length!=2)   
  68.         {   
  69.             System.out.println("邮箱格式不正确!");   
  70.             delegate.setFormComponent((IFormComponent)getComponent("email"));   
  71.             delegate.record("邮箱格式不正确!",ValidationConstraint.EMAIL_FORMAT);   
  72.             this.setEmailMsg("邮箱格式不正确!");   
  73.             getBuilder().updateComponent("emailInfo");   
  74.             return;   
  75.         }   
  76.            
  77.         getBuilder().updateComponent("emailInfo");   
  78.         return;   
  79.     }   
  80.        
  81.     public void onSubmit(){   
  82. //      if(getReflush())   
  83. //          return;   
  84. //      ValidationDelegate delegate = (ValidationDelegate)this.getBeans().getBean("delegate");   
  85. //      if(delegate.getHasErrors())   
  86. //          return;   
  87.         System.out.println("**********表单提交成功!**********");   
  88.     }   
  89.   
  90. }   

遇到的几个问题:

1、若在page页中的<binding value="validators:required" name="validators"></binding>中加入email验证,即将Home.page中的:

xml 代码
  1. <binding name="validators" value="validators:required"/>  

替换为:

xml 代码

<binding value="validators:required,email" name="validators"></binding>

  1. <binding name="validators" value="validators:required,email"/>  

,则无法触发checkEmail()事件。难道这两者之间存在对立的关系?

2、在输入格式正确,触发checkEmail()事件后,也会触发表单提交事件,即onSubmit()监听方法也会被触发,而且并没有调用校验对象验证任何信息!这样的话,若存在多个需要验证的字段,那么其他字段的验证都会被忽略(实践过)!本来以为是我校验代理配置有问题,于是在workbench的Field页面类中加了一段代码:

java 代码
  1. @EventListener(events = "onblur", targets = "inputEmail")   
  2.     public void check(){   
  3.      System.out.println("sdgasdgs");   
  4.     }  

结果运行后发现它也是没通过任何验证直接提交表单!

3、在输入格式验证没通过,触发checkEmail()事件显示错误信息后,点击提交按钮,仍然会成功提交表单!相当于delegate.setFormComponent((IFormComponent)getComponent("email"));
   delegate.record("邮箱格式不正确!",ValidationConstraint.EMAIL_FORMAT);并没有其到作用!只是在checkEmail()事件触发的时候有取到值,之后就没有取到(估计是保存验证错误信息到delegate的写法有误,望大哥们相助)。

4、checkEmail()代码中倒数第二句:getBuilder().updateComponent("emailInfo");也没起到作用!例如:用户第一次输入有误,在看过错误提示信息后,重新输入正确了!那么,就要清除错误信息了!可是,运行结果却并没有刷新出来,不知道是为什么...

 

碰到的问题如上,由于理解得不是很到位,一些状况可能并没有描述得很清楚,望各位见谅了!谢谢!

分享到:
评论
1 楼 lean1252 2008-08-05  
 public void onSubmit(){    
//      if(getReflush())    
//          return;    
//      ValidationDelegate delegate = (ValidationDelegate)this.getBeans().getBean("delegate");    
//      if(delegate.getHasErrors())    
//          return;    
        System.out.println("**********表单提交成功!**********");    
    }    

让checkEmail方法返回一个状态,然后在onSubmit方法中根据这个状态,进行判断

相关推荐

    CCS4.1.2软件安装、使用与仿真器驱动配置

    CCS4.1.2软件安装、使用与仿真器驱动配置

    httpclient4.1.2 jar包

    本文将深入探讨HttpClient 4.1.2的核心特性、用法以及在实际开发中的应用。 一、HttpClient 4.1.2概述 HttpClient 4.1.2是HttpClient库的稳定版本,它主要关注性能提升、错误修复和新特性的引入。该版本支持...

    httpclient4.1.2.zip

    HttpClient 4.1.2是Apache HttpClient的一个稳定版本,它在前一版本的基础上进行了优化和增强,为开发者提供了更加高效、可靠的网络请求处理能力。 HttpClient 4.1.2的核心在于其对HTTP协议的全面支持,包括基本的...

    poi-4.1.2-API文档-中英对照版.zip

    赠送jar包:poi-4.1.2.jar; 赠送原API文档:poi-4.1.2-javadoc.jar; 赠送源代码:poi-4.1.2-sources.jar; 赠送Maven依赖信息文件:poi-4.1.2.pom; 包含翻译后的API文档:poi-4.1.2-javadoc-API文档-中文(简体)-...

    opencv-4.1.2.zip

    在本案例中,我们讨论的是OpenCV的4.1.2版本,这是一个重要的里程碑,因为它引入了许多新特性、优化和性能提升。 OpenCV 4.x系列相较于之前的3.x版本,最大的变化之一是模块化设计。在4.x版本中,原先的单一库被...

    spring-4.1.2框架

    8. **Spring Boot**: 虽然Spring Boot不是4.1.2直接包含的内容,但这个版本与Spring Boot的早期版本兼容良好,Spring Boot简化了Spring应用的启动和配置,让开发变得更加迅速。 9. **源码分析**: 包含源码包意味着...

    poi-4.1.2.zip

    "poi-4.1.2.zip"是一个包含Apache POI库的压缩包,适用于开发人员在Java项目中进行Excel数据的导入和导出操作。这个新版本的特性与旧版本有所不同,因此了解其更新内容和如何使用这些新特性至关重要。 1. **Apache ...

    poi-4.1.2完整jar包

    poi-4.1.2完整jar包。 poi-4.1.2.jar poi-examples-4.1.2.jar poi-excelant-4.1.2.jar poi-ooxml-4.1.2.jar poi-ooxml-schemas-4.1.2.jar poi-scratchpad-4.1.2.jar

    jQuery formValidator表单验证插件4.1.2,可换肤,可密码强度校验

    jQuery formValidator表单验证插件4.1.1功能说明, 1、支持换肤(目前自带4套皮肤,其中包括58网、网易邮箱注册两套皮肤,当前演示的是网易126的皮肤) 2、支持密码强度校验 3、支持固定提示层 4、支持输入框内值...

    opencv4.1.2资源包

    将opencv_contrib与主库一起编译和使用,可以让开发者访问到更多高级的计算机视觉功能。 OpenCV 4.1.2版本引入了一些重要的更新和改进,比如优化的性能、新算法的添加以及对新硬件的支持。在4.x系列中,OpenCV引入...

    gcc-4.1.2.tar.gz

    GCC 4.1.2是该系列的一个版本,发布于2007年,包含了C、C++、Fortran、Objective-C、Ada等多种编程语言的编译器。这个版本在当时引入了许多新特性、性能优化和错误修复。 在GCC 4.1.2中,以下是一些关键的知识点: ...

    poi-4.1.2-API文档-中文版.zip

    赠送jar包:poi-4.1.2.jar; 赠送原API文档:poi-4.1.2-javadoc.jar; 赠送源代码:poi-4.1.2-sources.jar; 赠送Maven依赖信息文件:poi-4.1.2.pom; 包含翻译后的API文档:poi-4.1.2-javadoc-API文档-中文(简体)版...

    hibernate4.1.2

    Hibernate 4.1.2 是一个重要的版本更新,在Java开发领域中,它是持久化框架Hibernate的一个里程碑。这个版本带来了许多改进和新特性,使得开发者在处理数据库操作时更加高效便捷。接下来,我们将深入探讨Hibernate ...

    poi-ooxml-4.1.2-API文档-中文版.zip

    赠送jar包:poi-ooxml-4.1.2.jar; 赠送原API文档:poi-ooxml-4.1.2-javadoc.jar; 赠送源代码:poi-ooxml-4.1.2-sources.jar; 赠送Maven依赖信息文件:poi-ooxml-4.1.2.pom; 包含翻译后的API文档:poi-ooxml-...

    bugzilla-4.1.2

    bugzilla-4.1.2

    gcc_4.1.2_x86_64

    cpp-4.1.2-48.el5.x86_64.rpm gcc-4.1.2-48.el5.x86_64.rpm gcc-c++-4.1.2-48.el5.x86_64.rpm glibc-2.5-49.x86_64.rpm glibc-common-2.5-49.x86_64.rpm glibc-devel-2.5-49.x86_64.rpm glibc-headers-2.5-49.x86_64...

    poi 3.8和4.1.2.rar

    在给定的压缩包“poi 3.8和4.1.2.rar”中,包含了两个不同版本的Apache POI库:3.8和4.1.2。这些版本分别代表了该库在不同时间点的发展状态,提供了对Excel文件进行读取、写入和修改的功能。 Apache POI的主要功能...

    R-4.1.2.tar.gz

    4. **编译与安装**:执行`make`命令来编译源代码,之后使用`sudo make install`将R安装到系统路径中。可能需要管理员权限来完成安装。 5. **验证安装**:安装完成后,你可以通过在终端输入`R`来启动R会话,验证安装...

    android 4.1.2 卡刷root包

    CLASS.SF文件,用于校验包的完整性和签名;以及KEY.RSA或KEY.SF文件,用于验证文件的来源和安全。这些文件确保了你安装的root包来自可信赖的源,并且没有被篡改。 2. **system**: 这个目录通常包含需要修改或替换的...

    Sourcetree_4.1.2_238.zip

    标题中的"Sourcetree_4.1.2_238.zip"表明这是一个软件的压缩包,Sourcetree是Atlassian公司开发的一款强大的Git和Mercurial桌面客户端,主要用于版本控制系统。版本号4.1.2指的是该软件的特定更新版本,238可能是...

Global site tag (gtag.js) - Google Analytics