- 浏览: 117037 次
- 性别:
- 来自: 哈尔滨
最新评论
-
1054442516:
大哥,小弟刚入门一个月。请tapestry如何集成Mybati ...
(C4)Tapestry IoC:Tapestry IoC Decorators -
walkerstar:
我都是这样做的 public void contribute ...
(2)Tapestry5学习小结:中文验证问题 -
hongyuzhe:
我是真的,那么的那么的希望能多贴出一些,代码说出来。既然能翻译 ...
(A18)Tapestry Core :Configuring Tapestry -
changshuangyi:
问个问题呀,我写的时候为什么private UserAuthe ...
(A6)Tapestry Core:Form Input and Validation -
zhenjw:
怪不得我想看5.0的源代码看不了,原来是没有真正的开放出来呢。 ...
(3)Tapestry5学习小结:显示问题
本文翻译出处 http://tapestry.apache.org/tapestry5/tapestry-core/guide/validation.html
本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。
chinajavawolf
表单输入和验证
对于任何应用表单输入都是必不可少的;这是更有效的从用户处收集有用信息的方法。不管它是一个搜索表单、一个登录窗口或是一个多页的注册向导,用户使用表单真正向应用表达自己。
Tapestry在创建表单和验证输入方面表现杰出。输入验证是声明式的,这意味着你只是告诉Tapestry在给出的那个表单域上应用什么验证,然后他就会在服务器端和客户端负责验证。
最后,Tapestry不仅能够将错误的信息表现给用户,还能对表单域和表单域地标签进行装饰,标记它们包含错误(主要利用CSS效果)。
表单组件
表单组件产生许多的组件事件component events,你可以提供事件处理器方法给他。
当呈现的时候,表单组件发布一个”prepare”通知,以使表单容器设置将要在表单中引用的表单域或属性。这是一个创建用来呈现的临时实体对象或用来加载来自于数据库的可编辑的实体的好时机。
当用户在客户端提交表单时,服务器端会执行一系列的步骤。
首先,当表单被呈现时表单会发出一个"prepare"通知。
接下来,所有的表单域被激活从引用的请求处获值,验证它们并(如果有效)保存变化。
对Tapestry 4的用户:Tapestry 5不使用Tapestry 4中脆弱的"form rewind"方法,而是用在呈现时产生一个存放是否需要处理表单提交信息的隐藏域来代替。
表单域流程处理完后,表单发出一个"validate"事件,这是执行跨表单验证的不能明白地被描述的一个机会。
接下来,表单确定是否存在任何验证错误。如果存在,那么提交一个被评估过的失败并发出一个"failure"事件。如果没有验证错误,那么将发出一个"success"事件。
最后,表单发出一个"submit"事件(逻辑上它不考虑成功还是失败)。
跟踪验证错误
一个与表单关联的就是验证跟踪器ValidationTracker跟踪用户所有对每个表单域提供的书如何验证错误。跟踪器能够通过表单的跟踪器参数提供给表单,但这不是必需的。
表单包括isValid()和getHasErrors()方法,他们被用来了解表单验证的跟踪器中是否包含错误。
在你自己的逻辑中,你可以去纪录你自己的错误。表单包括两个不同的recordError()方法版本。一个是指定一个表单域(一个被所有表单元素组件实现的接口),另外一个是全局"global"错误,与具体的表单域无关。
请求间存储数据
由于其他的动作请求,表单提交的结果会发送给客户端一个重定向去重新呈现页面。验证跟踪器必须在请求间被持久化地存储,否则所有的验证信息将被丢失(表单提供持久化式的默认验证跟踪器)。
同样,被组件更新的单独的表单域也应该被持久化。
例如,一个用来收集用户名和密码登陆页,如下:
- public class Login
- {
- @Persist
- private String _userName;
- private String _password;
- @Inject
- private UserAuthenticator _authenticator;
- @Component(id = "password")
- private PasswordField _passwordField;
- @Component
- private Form _form;
- String onSuccess()
- {
- if (!_authenticator.isValid(_userName, _password))
- {
- _form.recordError(_passwordField, "Invalid user name or password.");
- return null;
- }
- return "PostLogin";
- }
- public String getPassword()
- {
- return _password;
- }
- public void setPassword(String password)
- {
- _password = password;
- }
- public String getUserName()
- {
- return _userName;
- }
- public void setUserName(String userName)
- {
- _userName = userName;
- }
- }
注意onSuccess()不是公有的;事件处理器方法可以有任何可见度,甚至是私有的。包私有(就是没有修饰符)是典型应用,这样它允许组件可被相同包下的测试用例类测试。
如果先前没有验证错误,表单就只发出一个"success"事件。这意味着不用写
if (_form.getHasErrors()) return;在方法的第一行。
最后,注意业务逻辑如何与表单验证相适合。UserAuthenticator服务负责userName和password的有效性。当它返回false时,我们用Form组件来记录一个错误。我们提供PasswordField实例作为第一个参数;这保证了password表单域和他的标签在表单重新呈现时被装饰以呈现错误给用户。
配置表单域和标签
页面模板包含最少的Tapestry内容
- <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
- <head>
- <title>Logintitle>
- head>
- <body>
- <h1>Please Loginh1>
- <t:form>
- <t:errors/>
- <t:label for="userName"/>:
- <input t:type="TextField" t:id="userName" t:validate="required,minlength=3" size="30"/>
- <br/>
- <t:label for="password"/>:
- <input t:type="PasswordField" t:id="password" t:validate="required,minlength=3" size="30"/>
- <br/>
- <input type="submit" value="Login"/>
- t:form>
- body>
- html>
Errors组建必须被放在表单里,他通过一个单独的列表输出表单中所有表单域的错误。他使用一些简单的样式使结果更突出。
每个表单组件,例如TextField,和Label组件是一对的。标签将呈现出一个元素和表单域关联。这对于应用是很有用的,尤其是有视觉障碍的用户。它意味着你可以能过点击标签文本将光标移到相应的表单域。
Label的for参数就是组件的id.
对于TextFile,我们提供一个组件id,userName.我们能够指定value参数,默认情况下这个参数是匹配TextField的id,TextField的id又对应于容器的一个属性,这个容器就是Loing页,如果这个属性存在。
根据经验,你应该给你的表单域指定一个id(这个id将被用来产生呈现标签的name与id属性). 被允许省略value参数以帮助保持模板不变得更混乱。
验证参数确认表单域应该发生什么验证。这是一个验证器的名字列表。验证器被配置在Tapestry内,并且有效的验证器列表是可扩展的。。"required"是一个内置验证器的名字,用来保证提交的值不为空串,此外,"minlen"用来保证值有指定的最小长度。
验证参数使用t:前缀放置在Tapestry的命名空间里。这不是必须严格要求的,只是模板可以拥有良好的格式。然而,在Tapestry命名空间放置Tapestry特定值保证了模板自身的有效性。
错误和装饰
注意:这部分并没有更新到涉及客户端输入验证的介绍。
当你第一次激活登陆页时,表单域和表单都将正常呈现,等待输入:
注意标签组件是如何显示表单域的文本名字的。我们没做任何显式地配置,组件的ids ("userName" and "password")已经转成"User Name" 和 "Password",这发生了什么?。
如果你这样提交表单,表单域将违背"required"约束,那么页面将重新显示错误呈现给用户。
这里发生了两个微妙的事情。首先,Tapestry跟踪所有表单域的所有错误信息。Errors组件显示在表单的最上面。此外,默认的验证修饰器给标签和表单域加上了t-error CSS类样式。Tapestry提供了默认的 CSS样式与"t-error"类结合使得它们变红。
接下来,我们填充上用户名,但不用提供足够的字符串给密码。
用户名是正确的,但是有一个错误在密码上。PasswordField组件默认是经常显示一个空值,另外我们看到只密码部分在那里。
如果有足够的字符串被提交,我们会看到Login页面是如何将逻辑错误加入到表单域的错误里:
这可真是天衣无缝,对于内置的验证器和基于应用逻辑产生的错误在外观、感觉和行为上都像是一样的。
评论
3 楼
changshuangyi
2007-10-08
问个问题呀,我写的时候为什么private UserAuthenticator _authenticator 会报错呀!谢谢你
2 楼
zhufeng822
2007-08-15
[[b]b]hlk[ /b]
1 楼
sueny589
2007-07-11
刚学习,请教一下哦:<input type="submit" value="Login"/> 这个表单提交到哪去了呢?
发表评论
-
(3)Tapestry5学习小结:显示问题
2007-06-27 11:34 5393显示问题 我在做验证的 ... -
(2)Tapestry5学习小结:中文验证问题
2007-06-27 10:54 4435Tapestry5学习小结:中文验证问题 Tapestry5. ... -
(1)Tapestry5学习小结:中文问题
2007-06-27 10:29 5615(1) Tapestry中文问题 在目前的Tapestr ... -
(F1)Tapestry Upload:Tapestry Upload Component
2007-06-23 12:41 2922本文翻译出处 http://tapestry.apac ... -
(E1)Tapestry-Test
2007-05-28 16:06 3178本文翻译出处 http://tapestry.apache ... -
(D1)Tapestry-Spring Integration
2007-05-28 15:17 3834本文翻译出处 http://tapestry.apache ... -
(C15)Tapestry IoC:Service Builders Shadow Services
2007-05-28 13:45 2612本文翻译出处 http://tap ... -
(C14)Tapestry IoC:Service Builders Building Pipelines
2007-05-28 12:45 2482本文翻译出处 http://tapestry.apache. ... -
(C13)Tapestry IoC:Service Builders Strategy Pattern
2007-05-28 11:30 2244本文翻译出处 http://tap ... -
(C12)Tapestry IoC:Service Builders Chain of Command
2007-05-28 10:10 2266本文翻译出处 http://tap ... -
(C11)Tapestry IoC:Ordering by Constraints
2007-05-27 15:27 2027本文翻译出处 http://tap ... -
(C10)Tapestry IoC:Object Providers
2007-05-27 14:38 2214本文翻译出处 http://tapestry.apache ... -
(C9)Tapestry IoC:Starting the Registry
2007-05-27 11:44 1946本文翻译出处 http://tap ... -
(C8)Tapestry IoC:Symbols
2007-05-27 10:48 2006本文翻译出处 http://tapestry.apache ... -
(C7)Tapestry IoC:Case Insensitivity
2007-05-26 17:02 1641本文翻译出处 http://tapestry.apache ... -
(C6)Tapestry IoC:Type Coercion
2007-05-26 14:29 1751本文翻译出处 http://tap ... -
(C5)Tapestry IoC:Tapestry IoC Configurations
2007-05-26 09:19 1750本文翻译出处 http://tapestry.apache ... -
(C4)Tapestry IoC:Tapestry IoC Decorators
2007-05-25 10:19 1843本文翻译出处 http://tapestry.apache ... -
(C3)Tapestry IoC:Tapestry IoC Services
2007-05-24 13:04 1873本文翻译出处 http://tapestry.apache ... -
(C2)Tapestry IoC:Tapestry IoC Modules
2007-05-22 12:47 2056本文翻译出处 http://tapestry.apache ...
相关推荐
### Tapestry 5:构建 Web 应用程序 #### 一、Tapestry 5 概述 Tapestry 5 是一个强大的 Java Web 开发框架,它为开发者提供了高效且简洁的方式去创建复杂的 Web 应用程序。本书《Tapestry 5:构建 Web 应用程序》...
### Tapestry开发知识点详解 #### 一、Tapestry简介及其背景 Tapestry是一种用于构建高度可伸缩且易于维护的Web应用程序的Java框架。它最初由Howard Lewis Ship开发,并于2000年发布。Tapestry的设计理念是为了...
Tapestry是一个分布式系统基础设施,专门设计用于实现容错性的广域定位和路由。这个系统由Ben Y. Zhao、John Kubiatowicz和Anthony D. Joseph等人在加州大学伯克利分校的计算机科学部开发,旨在应对无处不在计算的...
### Tapestry字典知识点概述 #### 一、基础知识 (Using Forms) **1.1 page文件和class文件联系** - **概念**: 在Tapestry中,`page`文件指的是页面定义文件,通常为HTML模板;而`class`文件则是Java类文件,用于...
"tapestry学习入门资料" Tapestry 是一个开源的基于 servlet 的应用程序框架,它使用组件对象模型来创建动态的、交互的 web 应用。 Tapestry 使得 Java 代码与 HTML 完全分离,利用这个框架开发大型应用变得...
1. **Tapestry Core**: 这是Tapestry框架的基础部分,包含了核心组件、服务容器(Tapestry IoC)和页面生命周期管理。通过源码分析,我们可以理解其如何实现页面组件的渲染、事件处理和依赖注入。 2. **Tapestry ...
基于库 特征: 无需编写一行 Javascript 即可创建推送应用程序 完全可配置 使用设置传入消息的格式 消息(使用字符串或自定义对象) 建立在坚如磐石的库之上 支持 抽象(在之上) 消息到达时客户端更新... form t :
Tapestry是一款强大的Java Web应用程序框架,由Apache软件基金会维护,它强调了组件化、模块化和可重用性,使得开发复杂的Web应用变得更加简单。本文将深入介绍Tapestry 4的相关知识点。 1. **组件化编程**: ...
Form Input Validation (第5章:表单输入验证)** - **客户端验证**:探讨了如何利用JavaScript等技术实现在客户端对表单数据进行初步验证的方法,以提高用户体验。 - **服务器端验证**:重点讲解了服务器端的表单...
《深入浅出Tapestry4》是一本专为开发者深入理解Tapestry4框架而编写的书籍。Tapestry4是Apache软件基金会开发的一个开源Web应用程序框架,它以组件化和事件驱动的方式,极大地简化了Java Web应用的开发。本章节我们...
Tapestry是一款强大的Java Web应用程序框架,由Apache软件基金会维护,它提供了一种基于组件的模型来构建动态、数据驱动的Web应用。本教程将帮助初学者了解Tapestry的基本概念,带你逐步入门并掌握其核心组件的使用...
### Tapestry 5.1 实例教程核心知识点详解 #### 一、Tapestry简介及特点 Tapestry是一款基于组件的Web开发框架,它利用Servlet技术构建了一种全新的面向组件的开发模型。该框架的核心理念是将Web应用程序分解为一...
2. **Tapestry Core**:`tapestry-core-5.3.8.jar`是Tapestry框架的核心库,包含了框架的基础组件、服务和API。它提供了页面、组件、事件处理、URL映射等功能,是构建Tapestry应用的基础。 3. **Plastic**:`...
挂毯React 将React( )与Tapestry( )一起使用。 该库提供了将Tapestry与JSX模板结合... define ( [ 't5/core/dom' , 'react' , 'react-dom' ] , function ( dom , React , ReactDOM ) { var HelloMessage = React
资源名称:深入浅出Tapestry内容简介:本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web应用程序中的整体架构实现。使读者在学习如何使用Tapestry框架技术的同时,还能够获得在...
这个压缩包包含了多个以"Tapestry"开头的子文件,如 "tapestry-core", "tapestry-hibernate", "tapestry-ioc", "tapestry-upload", 和 "tapestry-spring",这些都是Tapestry框架的不同模块或插件。这些文件的后缀是...
### 关于Tapestry的一些个人总结 #### 一、Tapestry简介与核心特性 Tapestry是一个基于Servlet的框架,它可以运行在任何支持Servlet的容器(如Tomcat)或者包含Servlet容器的应用服务器(例如JBoss)之上。该框架...
《Tapestry 5:构建Web应用程序》是关于Tapestry 5框架的一本权威指南。Tapestry 5是一个强大的Java Web应用框架,由Apache软件基金会开发并维护,它致力于提供一种更高效、更优雅的方式来构建动态、交互式的Web应用...
《深入理解 Tapestry 4.1.5:项目实例与核心库解析》 Tapestry 是一个基于 Java 的开源Web 应用程序框架,它强调组件化开发,提供了一种强大的方式来构建动态、高性能的Web 应用。在"tapestry-project-4.1.5"这个...