精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Tapestry 5輸入驗證的實現方法

開發 后端
Tapestry 5在表達輸入和驗證方面表現良好。本文向您介紹Tapestry 5輸入驗證的實現方法,包括表單輸入、驗證、表單組件和錯誤跟蹤等。

表單輸入與驗證
 
表單輸入是任何應用的生命之血;這是一種從用戶收集有用信息的最有效的方式。不管它是一個搜索表單、一個登錄還是一個多頁的注冊向導,用戶借助表單在應用中真正地表達他們。
 
Tapestry 5輸入驗證在創建和驗證輸入有很好的表現。輸入驗證是聲明式的,意味首我們簡單地告訴Tapestry一個表單域應用哪種驗證,然后Tapestry會在服務器端(已實現)與客戶端維護這種驗證。
 
最后,Tapestry不僅能夠將錯誤的信息表現給用戶,而且還能對表單域及其標注(labels)進行裝飾,標記它們包含錯誤(主要利用CSS效果)。
 
表單組件

 
Tapestry的表單支持的核心即是表單組件,表單組件封裝著其他所有表單域組件,如TextField、TextArea、Checkbox等等。
 
表單組件產生許多組件事件,我們可以給其提供事件處理方法。
 
呈現時,表單組件發出一個“prepare”通知,以使表單容器創建將要在表單中引用的表單域或屬性。如,這是一個創建被呈現的臨時實體對像或者載入一個源自數據庫的可被編輯的實體的好機會。
 
在Tapestry 5輸入驗證中,當用戶在客戶端提交表單時,服務器端會執行一系列的步驟。
 
首先,表單呈現時會發出一個“prepare”通知。
 
其次,所有的表單域被激活并將從請求中得到相應的值,驗證它們及(如果有效)保存現有的變化。
 
對Tapestry 4的用戶:Tapestry 5不使用Tapestry 4中脆弱的表單刷新(form rewind)方法,而是在表單呈現時產生一個存放是否需要處理表單提交信息的隱藏域。
 
表單域流程處理完后,表單發出一個“validate”事件,這是一個執行跨表單驗證(還不能公布其詳情)的機會。
 
然后,表單確定是否存在任何Tapestry 5輸入驗證錯誤。如果存在,表單提交失敗并發出一個"failure"事件。如果沒有驗證錯誤,些時將發出一個"success"事件。
 
最后,表單發出一個"submit"事件(邏輯上,它不考慮成功與否)。
 
跟蹤驗證錯誤
 
一個與表單關聯的就是驗證跟蹤器(ValidationTracker),它跟蹤著表單域對應的所有的用戶輸入與用戶驗證錯誤。跟蹤器可以通過跟蹤器參數提供給表單,不過很少用到。
 
表單(Form)包括兩個isValid() 和 getHasErrors()方法,用來查看表單驗證跟蹤器是否存在任何錯誤。
 
在我們的邏輯中,我們可以記錄驗證錯誤。表單(Form)包括兩個不同版本的recordError()方法,一個是指定一個表單域(Field,一個被所有表單元素組件實現的接口),另外一個是全局驗證錯誤("global" errors),與具體的表單域無關。
 
在請求間保存數據
 
因為其他的動作請求,表單提交的結果會向客戶端發出一個重定向來重新呈現頁面。驗證跟蹤器必須在請求間被持久化地(persistently)保存下來,否則所有的Tapestry 5輸入驗證信息會丟失(表單提供一個persisten形式的默認驗證跟蹤器)。
 
同樣地,組件更新單獨的表單域也應該被持久化。
 
比如,一個用來收集用戶名與密碼的登錄頁面,應該如下:

  1. public class Login  
  2. {  
  3.     @Persist 
  4.     private String _userName;  
  5.    
  6.     private String _password;  
  7.    
  8.     @Inject 
  9.     private UserAuthenticator _authenticator;  
  10.    
  11.     @Component(id = "password")  
  12.     private PasswordField _passwordField;  
  13.    
  14.     @Component 
  15.     private Form _form;  
  16.    
  17.     String onSuccess()  
  18.     {  
  19.         if (!_authenticator.isValid(_userName, _password))  
  20.         {  
  21.             _form.recordError(_passwordField, "Invalid user name or password.");  
  22.             return null;  
  23.         }  
  24.    
  25.         return "PostLogin";  
  26.     }  
  27.    
  28.     public String getPassword()  
  29.     {  
  30.         return _password;  
  31.     }  
  32.    
  33.     public void setPassword(String password)  
  34.     {  
  35.         _password = password;  
  36.     }  
  37.    
  38.     public String getUserName()  
  39.     {  
  40.         return _userName;  
  41.     }  
  42.    
  43.     public void setUserName(String userName)  
  44.     {  
  45.         _userName = userName;  
  46.     }  
  47. }  

因為Form表單提交實際上是兩個請求(提交自己,然后重新呈現頁面),所以需要在兩個請求間持久化保存在_userName屬性里的值。屬性_password同樣需要,除非PasswordField組件從不呈現值。
 
注意onSuccess()方法不是公共的(public);事件處理方法可以具有任何的可見性,甚至私有的。包可見性(即無可見性修飾)比較常用,這時它允許組件可被相同包下的測試用例類測試。
 
假如Form先前沒有存在驗證錯誤,它僅產生一個"success"事件,這意味著沒有必要在方法的第一行寫上if (_form.getHasErrors()) return;這樣的語句。
 
最后,注意業務邏輯如何與表單驗證相關聯。UserAuthenticator服務用來保證userName 和 (文本的) password的有效性。當它返回false時,我們用Form組件來記錄一個錯誤。我們提供一個PasswordField實例作為它的第一個參數,這保證了密碼表單域和它的標注(label)會在Form表單重新呈現時被修飾以表現錯誤給用戶看。
 
Tapestry 5輸入驗證的配置表單域及標注
 
頁面模板包含少量的Tapestry 標識(instrumentation):

  1. ﹤html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"﹥  
  2.     ﹤head﹥  
  3.         ﹤title﹥Login﹤/title﹥  
  4.     ﹤/head﹥  
  5.     ﹤body﹥  
  6.         ﹤h1﹥Please Login﹤/h1﹥  
  7.    
  8.         ﹤t:form﹥  
  9.    
  10.             ﹤t:errors/﹥  
  11.    
  12.             ﹤t:label for="userName"/﹥:  
  13.             ﹤input t:type="TextField" t:id="userName" t:validate="required,minlength=3" size="30"/﹥  
  14.             ﹤br/﹥  
  15.             ﹤t:label for="password"/﹥:  
  16.             ﹤input t:type="PasswordField" t:id="password" t:validate="required,minlength=3" size="30"/﹥  
  17.             ﹤br/﹥  
  18.             ﹤input type="submit" value="Login"/﹥  
  19.         ﹤/t:form﹥  
  20.     ﹤/body﹥  
  21. ﹤/html﹥ 

Tapestry的Form組件負責創建form表單提交所需的URL(這個Tapestry的責任,不是你的)。
 
Errors組件必須放在Form里,它將Form組件里表單域的所有錯誤信息作為一個列表輸出,并應用一此簡單的樣式使得結果更顯眼。
 
每一個表單域組件,比如TextField,與Label組件成對。Label將呈現一個與表單域相連的<label>元素。這個組件對方便使用非常重要,特別對那些有視覺障礙(殘疾)的用戶。它意味著你可以能過點擊標注(label)文本將光標移動到相應的表單域中。Label組件的for參數即是一組件的id。
 
對于TextField,我們提供了一個組件id為userName。我們可以指定一個value參數,默認情況下這個value參數是匹配TextField的id,TextField的id又對應于組件容器(Login頁)的一個屬性(假如這個屬性存在)。
 
根據經驗,你通常應該為表單域指定一個特定的id(這個id將會被用來呈現標簽的name與id屬性)。允許省略value參數有利于防止模板變得更加混亂。
 
用來驗證表單域的validate參數標識,是一個驗證器的名字列表。驗證器在Tapestry中被配置,可用的驗證器都是可擴展的。"required"是一個內置驗證器的名字,用以保證提交的值不為空串,此外,"minlen"用來保證值具有最小的指定長度。
 
Validate參數用t:前綴被放置在Tapestry的命名空間里。這不是嚴格需要的,只是讓模板有個良好的格式。然而,在Tapestry命名空間放置Tapestry特定的值保證了模板的有效性。
 
錯誤及修飾Errors and Decorations
 
注意:這部分并沒有更新到涉及客戶端驗證的介紹。
 
在Tapestry 5輸入驗證中,當你第一次激活Login頁里,表單域及表單會被正常呈現等待輸入:

注意這里的Label組件怎樣顯示表單域的文本名字。我們未曾做過任何顯式地配置,組件的id ("User Name" 和 "Password")已經轉換成"User Name" 和 "Password",倒底發生了什么?。
 
如果你就這樣提交了表單,表單域就會違反了"required"約束,頁面將會重新顯示以呈現給用戶錯誤信息。

這里有兩個微妙事情,首先,Tapestry跟蹤了所有表單域的所有錯誤信息,Errors組件顯示在表單的最頂端;其次,默認的驗證修飾給標注(labels)和表單域的class屬性加上了t-error CSS樣式。Tapestry提供了默認的t-error CSS樣式使得它們變紅。
 
接下來,我們將在user name欄上填值,但不給password欄提供足夠的字符:User name欄正常,僅password欄有一個錯誤存在。PasswordField組件默認下通常顯示一空值,另外我們會看到僅password顯示在…
 
如果你輸入了足夠的字符后提交,我們會看到Login頁面是如何將邏輯錯誤加入到表單域的錯誤里:

這真是天衣無縫,基于應用的邏輯錯誤看起來感覺就像內置驗證器的行為。

 

【編輯推薦】

  1. Tapestry 5組件事件詳解
  2. Tapestry5的性能改進淺析
  3. Tapestry5新特性詳解
  4. JSF和Tapestry全面比較
  5. 初探下一代Web開發模式Tapestry
責任編輯:佚名 來源: JavaEye
相關推薦

2009-07-14 14:16:03

Tapestry 5.Tapestry教程Tapestry頁面

2009-06-29 18:04:13

Tapestry5

2009-06-29 17:42:03

Tapestry5新特

2009-07-03 14:28:03

Tapestry 5組

2009-08-20 13:47:57

C#驗證輸入方法

2009-06-22 14:22:41

JSF和Tapestr

2009-11-23 16:59:23

PHP圖形驗證碼

2009-07-03 16:33:13

Tapestry函數執

2009-06-24 16:16:30

JSF和Tapestr

2009-07-03 17:09:01

學習Tapestry

2010-01-04 16:30:06

Silverlight

2009-07-14 14:08:35

Tapestry 5.web.xml的配置

2009-07-29 16:47:40

ASP.NET表單身份

2009-07-03 14:46:42

JSP開發框架JSFTapestry

2009-05-13 10:02:37

Tapestry 5.servletApache

2009-12-16 17:37:31

Ruby on Rai

2022-02-17 13:04:57

網絡驗證運營商

2009-06-23 14:01:27

StrutsTapestryJSF

2010-05-27 09:11:18

jQuery

2009-08-05 15:54:49

Web Service
點贊
收藏

51CTO技術棧公眾號

久久成人激情视频| 国产精品麻豆免费版| 久久午夜福利电影| 国模私拍国内精品国内av| 中文字幕色av一区二区三区| av激情久久| 69视频免费看| 欧美日本不卡高清| 亚洲精品www久久久| 天天综合网久久| 国产偷倩在线播放| 欧美激情在线观看视频免费| www 成人av com| 一二三区免费视频| 亚洲国产精品成人| 精品香蕉一区二区三区| 天天干天天av| 岛国av免费在线观看| 国产精品女主播av| 久久99精品久久久久子伦| 91尤物国产福利在线观看| 性8sex亚洲区入口| 欧美日本啪啪无遮挡网站| 欧洲av一区二区三区| 亚洲视频精选| 欧美二区在线观看| 欧美aⅴ在线观看| 女同一区二区免费aⅴ| 国产精品久久久久影视| 免费成人看片网址| 蜜臀久久精品久久久久| 精品一区二区影视| 国产精品久久久av| 久久国产黄色片| 亚洲精品美女91| www欧美日韩| 男女做爰猛烈刺激| 亚洲日本三级| 日韩成人中文字幕| 欧美精品福利视频| 国产又黄又猛视频| av在线加勒比| 伊人久久大香| 欧美 日韩 国产一区二区在线视频 | www.日本高清视频| 日韩欧美四区| 亚洲国产另类久久精品| 第一页在线视频| av在线播放一区二区| 欧美亚洲自拍偷拍| 国产免费视频传媒| 亚洲成人看片| 一本到不卡免费一区二区| 成人在线播放网址| 黄页在线观看免费| 亚洲影视在线播放| 欧美国产日韩激情| 中文国产字幕在线观看| 亚洲欧美经典视频| 91麻豆天美传媒在线| 99视频免费在线观看| 亚洲欧美欧美一区二区三区| 中文字幕一区二区三区精彩视频 | 国模无码视频一区二区三区| 成人观看网址| 日韩欧美精品中文字幕| 欧美精品色婷婷五月综合| 毛片无码国产| 欧美在线你懂的| 国产精品久久久毛片| 日韩国产一二三区| 日韩色在线观看| 国产综合内射日韩久| 欧洲vs亚洲vs国产| 青青青爽久久午夜综合久久午夜| 色婷婷综合成人av| 日本中文字幕免费在线观看| 国产精品hd| 欧美亚洲成人精品| 另类图片亚洲另类| 久久久精品人妻无码专区| 国产九一精品| 久久精品一本久久99精品| 久久久久亚洲AV| 欧美亚洲视频| 国产综合福利在线| 黑人精品一区二区| 久久久www成人免费毛片麻豆| 亚洲精品中字| 里番在线播放| 91福利视频久久久久| 精品久久久99| 久久97精品| 综合国产在线视频| 国产精品丝袜一区二区| 国产一区二区精品| 成人黄色在线播放| 午夜成人鲁丝片午夜精品| 中文字幕第一区二区| 免费人成自慰网站| 日韩精品第一| 亚洲第一精品夜夜躁人人躁| 国产免费无遮挡吸奶头视频| 欧美精选一区| 国产精品永久免费观看| 四虎永久在线观看| 亚洲色图丝袜美腿| 国产午夜福利视频在线观看| 国产精品中文| 亚洲片在线观看| 九九视频免费观看| 开心九九激情九九欧美日韩精美视频电影 | 蜜桃传媒视频第一区入口在线看| 91涩漫在线观看| 欧美日韩激情小视频| 永久免费黄色片| 精品免费在线| 98视频在线噜噜噜国产| 国产成人精品a视频| 东方欧美亚洲色图在线| 伊人久久综合| 成人av免费电影网站| 精品国产av 无码一区二区三区| 国产乱色精品成人免费视频| 久久福利毛片| 97久草视频| 日日夜夜精品一区| 日本黄色一区二区| 成年人的黄色片| 欧美午夜不卡影院在线观看完整版免费| 国产精品国产自产拍高清av水多 | 成人午夜电影免费在线观看| www日韩tube| 一本大道av伊人久久综合| 秘密基地免费观看完整版中文 | 国产91沈先生在线播放| 欧美黄页在线免费观看| 亚洲天堂网站在线观看视频| 国产午夜性春猛交ⅹxxx| 成人激情免费网站| 91传媒免费视频| 美女久久精品| 两个人的视频www国产精品| 92久久精品一区二区| 中文字幕乱码一区二区免费| www日韩视频| 国产亚洲电影| 国产精品久久久久影院日本| 国产精品麻豆一区二区三区 | 中文字幕一区不卡| 日韩一级免费片| 成人在线免费观看视频| 国产精品高潮在线| 在线免费看黄网站| 欧美精品乱码久久久久久按摩| 男人舔女人下部高潮全视频| 日本在线观看不卡视频| 亚洲成人精品电影在线观看| 国产一区二区三区影视| 久久精品国产2020观看福利| 国产又黄又粗又猛又爽| 亚洲精品免费在线观看| 中文字幕1区2区| 夜夜精品视频| 日韩欧美精品久久| 国产成人午夜性a一级毛片| 中文字幕一精品亚洲无线一区 | 91久久亚洲| 免费精品一区二区三区在线观看| 91在线成人| 国产在线|日韩| av最新在线观看| 亚洲欧美视频在线播放| 丰满少妇一区二区| 久久久久久久9999| 国产日韩精品中文字无码| 99色在线观看| 亚洲国产成人精品久久| 国产伦精品一区二区三区视频网站| 97国产一区二区| 成年人网站大全| 欧美大片aaaa| 国产在线精品一区| 久久天堂av| 欧美高跟鞋交xxxxhd| 婷婷婷国产在线视频| 欧美日韩另类国产亚洲欧美一级| 美女福利视频在线观看| 91香蕉视频污在线| 日韩在线一区视频| 亚洲日本黄色| 一区二区三区欧美成人| 大陆精大陆国产国语精品| 国产精品高潮视频| 黄页网站在线| 中文字幕日韩av| 人妻少妇精品无码专区| 欧美日韩dvd在线观看| 久久精品久久国产| 国产精品免费视频一区| 日韩免费高清一区二区| 捆绑调教美女网站视频一区| 日日碰狠狠添天天爽超碰97| 欧美丰满日韩| 热舞福利精品大尺度视频| 午夜日韩影院| 国产精品天天狠天天看| 激情国产在线| 色综合天天综合网国产成人网| 黄色影院在线播放| 亚洲精品一区二区三区蜜桃下载| 国产乱码77777777| 午夜精品免费在线观看| 免费在线观看h片| 国产欧美一区二区三区鸳鸯浴 | 亚洲精品资源美女情侣酒店| 国产免费高清av| 在线视频中文字幕一区二区| 国产一级片播放| 自拍偷拍亚洲激情| 成人在线观看免费高清| 96av麻豆蜜桃一区二区| 在线观看网站黄| 精品综合免费视频观看| 亚洲精品高清无码视频| 国产一区二区三区久久| 男人的天堂avav| 视频区 图片区 小说区| 丝袜美腿高跟呻吟高潮一区| 久久手机在线视频| 中文字幕午夜精品一区二区三区| 日韩欧美精品一区二区| 免费成人高清在线视频theav| 国产高清在线一区二区| 日韩精品视频一区二区三区| 成人黄色免费在线观看| 国产精品蜜月aⅴ在线| 国产精品国语对白| 姬川优奈av一区二区在线电影| 97久久精品国产| av在线加勒比| 久久久之久亚州精品露出| 丝袜在线视频| 欧美丰满少妇xxxxx| 免费在线观看的电影网站| 欧美另类极品videosbest最新版本| 色影视在线观看| 日韩在线视频免费观看高清中文 | 91美女片黄在线观看91美女| 911亚洲精选| 成人天堂资源www在线| 无码人妻一区二区三区在线视频| 国产毛片精品国产一区二区三区| 岛国毛片在线播放| 精品一二三四区| 尤物网站在线看| 国产成人午夜视频| 精品久久久久久无码人妻| 成人一级黄色片| free性中国hd国语露脸| 国产亚洲精品7777| 天天干天天操天天拍| 中文字幕精品一区二区精品绿巨人| 亚洲激情图片网| 亚洲人成伊人成综合网小说| 久久黄色免费视频| 欧美日韩精品在线播放| av图片在线观看| 欧美日韩免费不卡视频一区二区三区 | 国产精品爽黄69| 国产一区一区| 精品欧美一区二区久久久伦| 精品在线91| 一区二区免费在线观看| 欧美激情1区2区3区| 久久综合九色综合88i| 久久午夜影视| 美女少妇一区二区| 国产成人综合在线播放| 一本加勒比北条麻妃| 亚洲色图.com| 欧美另类一区二区| 欧美少妇性性性| 国产成人手机在线| 亚洲天堂第二页| 一区二区三区伦理| 国产99视频在线观看| 国产精品一区二区精品| 久久精品国产一区二区三区不卡| av在线不卡顿| 妞干网在线播放| 蜜桃视频第一区免费观看| 三级黄色片播放| 国产午夜亚洲精品午夜鲁丝片| 国产一二三区精品| 色狠狠色狠狠综合| 朝桐光av在线一区二区三区| 亚洲欧洲在线视频| 欧美人与性动交α欧美精品图片| 国产不卡视频在线| 成人影院中文字幕| 亚洲午夜久久久影院伊人| 伊人久久综合| 污污视频在线免费| 国产欧美日韩三区| 日韩久久精品视频| 91精品国产一区二区三区香蕉 | 国产999精品在线观看| 久久综合一区二区三区| 欧美午夜不卡| 国产在线观看中文字幕| 日本一区二区三区在线不卡| 国产一级片播放| 欧美一区二区日韩| p色视频免费在线观看| 97超碰国产精品女人人人爽 | 精品一区二区三区国产| 亚洲在线久久| 九九热99视频| 欧美激情一区二区三区全黄 | 午夜小视频在线观看| 国产精品视频精品| 在线视频亚洲专区| 日本网站免费在线观看| 成人精品在线视频观看| 成人性生活毛片| 欧美日韩aaaaa| 在线观看免费高清完整| 国产99久久精品一区二区永久免费| 老牛精品亚洲成av人片| 国产成人艳妇aa视频在线 | 亚洲r级在线观看| 日韩在线观看一区 | 欧美高清xxx| 亚洲欧美日韩精品综合在线观看| 六月丁香综合| 国产三级视频网站| 精品久久久一区| 视频一区 中文字幕| 高清欧美性猛交xxxx| 超碰cao国产精品一区二区| 免费极品av一视觉盛宴| 国产精品羞羞答答xxdd| 亚洲国产成人精品综合99| 欧美精品乱码久久久久久按摩| 精品黄色免费中文电影在线播放| 国产精品日韩在线一区| 成人羞羞视频播放网站| 欧美美女一级片| 亚洲女人的天堂| 丰满人妻妇伦又伦精品国产| 久久久噜噜噜久久| 亚洲色图美女| 色多多视频在线播放| 国产精品国产三级国产普通话99| 97超碰人人草| 色综合91久久精品中文字幕 | 精品国产乱码久久久久久浪潮| 第一中文字幕在线| 韩国成人一区| 久久综合伊人| 亚洲a∨无码无在线观看| 91精品国产综合久久精品| 福利在线导航136| 久久人人爽爽人人爽人人片av| 蜜桃久久av| 国产大屁股喷水视频在线观看| 777色狠狠一区二区三区| 色呦呦在线播放| 麻豆亚洲一区| 久久99精品国产麻豆婷婷| 波多野结衣家庭教师| 精品国产乱码久久久久久免费| 亚洲一级少妇| 尤物一区二区三区| 成人免费毛片片v| 无码人妻av一区二区三区波多野 | 青青草原免费观看| 亚洲国产精品va在线看黑人动漫| 综合毛片免费视频| 在线免费一区| 97国产精品videossex| 久久久久久av无码免费看大片| 美女999久久久精品视频 | 日韩国产高清视频在线| 91在线亚洲| 国产二区视频在线| 国产日本欧洲亚洲| www.久久久久久| 日韩av日韩在线观看| 99热在线成人| 男人网站在线观看| 欧美日韩一级片网站| 国产白丝在线观看| 亚洲欧美日韩精品久久久| 99久久婷婷国产| 国产又粗又黄又爽的视频| 91精品国产高清久久久久久| 91久久国产| 37p粉嫩大胆色噜噜噜|