Tapestry

          記錄學(xué)習(xí)Tapestry專用布格格。很多文章都轉(zhuǎn)載網(wǎng)絡(luò)。

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            20 隨筆 :: 0 文章 :: 4 評論 :: 0 Trackbacks
          <2007年3月>
          25262728123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          收藏夾

          Blog

          Tapestry

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          http://ralf-realman.javaeye.com/blog/post/144266

          Tapestry

          頁面對象

          在page文件中聲明屬性,可以不必在java文件中聲明以及其get、set方法
          t4默認(rèn)getXXX()抽象方法中的XXX為頁面屬性,.page不用聲明,并使用@InitialValue("value")賦初值.
          頁面對象實(shí)例會被緩存(有潛在非法訪問問題),解決方法:
          覆蓋initialize()方法,初始化實(shí)例變量。(在放入緩存池時天會調(diào)用initialize())
          在.page中聲明實(shí)例變量,.java聲明get\set方法(可有可無),t4自動生成代碼初始化
          實(shí)現(xiàn)PageBeginRenderListener接口,在頁面render之前初始化參數(shù),可防止空指針異常
          開發(fā)調(diào)試

          禁止緩存參數(shù)
          -Dorg.apache.tapestry.disable-caching=true -Dorg.apache.tapestry.enable-reset-service=true

          調(diào)試參數(shù)

          set JAVA_OPTS="-Dorg.apache.tapestry.disable-caching=true" set JPDA_ADDRESS=8000 set JPDA_TRANSPORT=dt_socket catalina jpda start
          activate()不會立即轉(zhuǎn)頁,它僅保存頁面對象引用在IRequestCycle中。listener執(zhí)行結(jié)束后才會轉(zhuǎn)業(yè)。

          獲得轉(zhuǎn)頁頁面對象

          .page不用任何聲明,.java提供抽象方法和元數(shù)據(jù)
          .page中inject頁面屬性,.java中提供抽象方法
          使用元數(shù)據(jù)inject頁面和屬性,可以不用在.page中進(jìn)行聲明
          獲得頁面使用@injectPage("pageName")
          t4中若發(fā)現(xiàn)該類包含一個未實(shí)現(xiàn)的“getXXX”方法,會默認(rèn)產(chǎn)生一個實(shí)例變量XXX。該實(shí)例變量沒有初始化方法,可以在getXXX()聲明@InitialValue("literal:initValue")解決

          表單驗(yàn)證

          delegate
          方案1:打印出錯信息需要new一個ValidationDelegate。
          方案2:.page文件中配置<bean>標(biāo)簽
          方案3:.page中不配置<bean>,抽象方法上使用元數(shù)據(jù)@Bean
          validators
          .page文件中每個需要驗(yàn)證的表單元素組件綁定一個validators
          表達(dá)式:validators:+判斷條件+[錯誤提示]
          空輸入問題
          t4默認(rèn)空都可以驗(yàn)證通過
          通過[value="validators:required"]來保證輸入不為空
          Fieldlable可以與TextField綁定顯示錯誤信息
          客戶端驗(yàn)證
          在Form組件中綁定<binding name="clientValidationEnabled" value="true"/>
          若表單輸入驗(yàn)證正確,邏輯上的驗(yàn)證應(yīng)該在監(jiān)聽方法中進(jìn)行
          例如:蘋果庫存只有20,用戶買進(jìn)50,這是非法的
          驗(yàn)證時應(yīng)向ValidationDelegate記錄出錯信息
          創(chuàng)建delegate
          delegate.setFormComponent((IFormComponent) getComponent("XXX"));
          delegate.recordFieldInputValue(Integer.toString(XXXX));
          delegate.record("XXX must be >=0",ValidationConstraint.TOO_SMALL);
          每個頁面對象都報含一個Map,保存bean。(沒有則自動創(chuàng)建,返回頁面池時bean自動銷毀1)若要在.page中獲得一個已定義的Bean,使用beans前綴調(diào)用。例如:beans.beanId.beanProperty。
          For、Foreach使用時,要在.page中對<source>集合對象內(nèi)的元素聲明<property>。以方便t4,生成get、set方法。

          組件復(fù)用

          t4中一個組件不能用兩次,即一個jwcid不能在.html中重復(fù)出現(xiàn)
          解決方案:組件重命名。<compoment id="rename" copy-of="name">
          “Class@XXX”表示訪問一個class的XXX靜態(tài)方法或靜態(tài)變量
          判斷按鈕是否clicked三種方式
          對每個button使用一個Form組件
          給每個button添加一個“tag”,通過tag值判斷which按鈕be clicked
          為每個button添加一個listener(簡單、面向?qū)ο螅扑]使用)

          submit提交原理

          監(jiān)聽方法獲得參數(shù)的方式
          1、實(shí)現(xiàn)IRequestCycle會的監(jiān)聽方法的參數(shù)
          2、聲明帶正確參數(shù)順序的監(jiān)聽方法,t4自動boxing
          * public type method(parameters)
          * public type method(IRequestCycle cycle, parameters)
          * public type method()
          * public type method(IRequestCycle cycle)
          頁面提交后,t4會從頁面pool重新獲得或創(chuàng)建page object。因此提交前后同一頁面的頁面對象引用是不一樣的,實(shí)例變量可能會一樣也不可能一樣。
          因此不要在頁面對象在定義成員變量(包括頁面組件對應(yīng)的成員變量),因?yàn)榭珥撁嬖L問他們總是無效的有潛在危險。
          上面問題的解決方案
          1、使用客戶端持久化需要訪問的持久化成員變量,聲明get、set抽象方法,用@Persist("client")注釋。 使用時應(yīng)判斷get方法是否為null,因?yàn)檫@種持久化方式不會初始化變量
          2、使用抽象get、set方法,由t4來實(shí)現(xiàn)。
          HiveMind模塊
          session對象可以在hivemodule.xml中配置
          hivemodule.xml存放于WEB-INF/classes/META-INF 目錄下。或.jar文件的META-INF目錄下
          hivemodule.xml每個模塊的id必須唯一,一般以模塊包名作為id
          session
          獲得方式
          1、聲明抽象方法,通過元數(shù)據(jù)injectState("ObjectName")注釋
          2、聲明抽象方法,在.page中<inject>對象
          判斷存在方式
          annotation
          1、聲明抽象方法,該方法命名格式為getXXX()或者isXXX()
          2、使用元數(shù)據(jù)注釋@InjectStateFlag("sessionObj")
          .page聲明<inject type="state-flag" property="userExists" object="sessionObj"/>
          注銷:使用Servicelink組件的restart service。該service刪除sessionObj,并且從定向到首頁。
          t4通過無參的構(gòu)造器來創(chuàng)建對象
          安全處理
          1、關(guān)鍵性頁面應(yīng)該在頁面中進(jìn)行用戶驗(yàn)證,防止匿名用戶訪問。頁面對象實(shí)現(xiàn)PageValidateListener接口。
          2、htmlA-〉login-〉htmlA方式解決方案
          該頁面類實(shí)現(xiàn)IExternalPage,該接口可接受參數(shù)
          參數(shù)維護(hù)
          客戶端保存參數(shù)(推薦)
          1、使用Hidden組件,并提供該屬的get、set方法實(shí)現(xiàn)
          2、使用元數(shù)據(jù)@Persist("client"),不能夠聲明abstract的set、get方法
          session保存參數(shù)
          snippets
          默認(rèn)表達(dá)式
          .html中為literal
          .page中為OGNL
          property access
          mathematical expressions
          method invocations
          reference static fields of public classes
          create new objects, including lists and maps
          URL中的sp,t3叫服務(wù)參數(shù)、t4叫監(jiān)聽參數(shù)
          page對象查詢
          1、.page中聲明
          2、在.application聲明org.apache.tapestry.page-class-packages中查找(推薦)
          特殊頁面組件
          1、$remove$,刪除該html元素(即僅去掉某元素)
          2、$content$,只生成該元素標(biāo)簽間的的html code, 該元素以外其它元素忽略去掉(即僅保留某元素標(biāo)簽內(nèi)的內(nèi)容)
          國際化
          html中使用技巧
          1、<span key="hello">Hello</span>指名說用字典key
          2、必須為<span>標(biāo)簽,且key自不必加前綴(如message:,OGNL:)
          不同地區(qū)的頁面風(fēng)格,以XXX_CN.html這種方式命名
          字典文件
          1、每個page可以擁有一個poperties
          2、在WEB-INF下建立${servletname}.properties,所有page共享
          自定義組件
          組件配置文件推薦最合理是放在WEB-INF下
          contrib中的控件的使用
          <library id="contrib" specification-path="/org/apache/tapestry/contrib/Contrib.library"/>
          input校驗(yàn)
          推薦使用writer.beginEmpty("input")
          使用writer.begin("input")和writer.end()
          rewinding(重繞),可以理解為刷新
          form.isRewinding()
          cycle.isRewinding()
          參數(shù)
          組件參數(shù)初始化
          .jwc中<parameter>設(shè)置初始化
          finishLoad()方法中初始化
          參數(shù)類型
          formal:是被定義在組件規(guī)范中的組件參數(shù)。每個formal parameter有一個特定(區(qū)分大小寫)的名稱,并且被標(biāo)為required或者optional。
          informa:是Html元素的屬性參數(shù)。
          頁面配置
          綁定方式
          1、靜態(tài)綁定:即只讀,綁定的值在組件規(guī)范中指定
          2、動態(tài)綁定:組件需要的時候,動態(tài)綁定通過其指定的JavaBean獲得值


          posted on 2007-03-30 22:43 Tapestry 閱讀(729) 評論(0)  編輯  收藏 所屬分類: Tapestry
          主站蜘蛛池模板: 绥化市| 邵东县| 昌乐县| 忻州市| 盘山县| 措美县| 颍上县| 济源市| 绍兴县| 衡山县| 南投县| 玉门市| 西盟| 布拖县| 祁东县| 浙江省| 罗源县| 梅河口市| 淳安县| 抚顺县| 利川市| 合肥市| 新闻| 武清区| 凤山市| 郧西县| 台中市| 平和县| 临潭县| 绥化市| 绥德县| 太仆寺旗| 马尔康县| 宣武区| 来安县| 松滋市| 陆丰市| 田阳县| 林周县| 黔江区| 谷城县|