Tapestry

          記錄學習Tapestry專用布格格。很多文章都轉載網絡。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            20 隨筆 :: 0 文章 :: 4 評論 :: 0 Trackbacks

          對之前的該文章進行了一些修正,主要是針對finishLoad()方法。

          我覺得對初學者會有一些幫助。

          下面這幾個函數是我在使用的,它們的執行順序依次從上到下。

          1.protected void finishLoad() {} ***

          2.public void pageValidate(PageEvent event) {}

          3.public void activateExternalPage(Object[] parameters, IRequestCycle cycle) {}

          4.public void pageBeginRender(PageEvent event) {}

          // 如果有表單提交,則將form中的各字段的值賦給頁面類
          5. ...... 賦值

          6.public void submit() // 表單提交等用listenter:調用的方法

          7.protected void prepareForRender(IRequestCycle cycle) {}

          ----------------------------------------------------

          1.protected void finishLoad() {}
          這個函數最先執行,但是它實際上沒有什么用處(我感覺)。因為:
            這個函數只在頁面池中沒有某一個頁面類、需要生成一個新的頁面對象時才調用。這里就有一個陷阱:如果你的tomcat啟動時使用了- Dorg.apache.tapestry.disable-caching=true(為了調試方便而設),那么你每次刷新頁面時,它都會執行(因為每個request都會新生成一個頁面類對象),造成了它總是執行的假象。在實際的部署時,會使用caching,則這個函數執行的機會很少。所以要注意。
            初始化的代碼放在4 pageBeginRender()中

          2.public void pageValidate(PageEvent event) {}
          如果實現了PageValidateListener接口,則可以在這里進行驗證,比如訪問權限等。執行完1后,它就開始執行。

          3.public void activateExternalPage(Object[] parameters, IRequestCycle cycle) {}
          如果實現了IExternalPage接口,則可以從這里取得由外面傳過來的參數。執行2后,執行到這里。在這里可以把那些參數取出,賦給頁面類。

          4.public void pageBeginRender(PageEvent event) {}
          執行完3后,將執行本函數。但是這時從客戶端傳過來的參數還沒有被賦值(如果提交了表單的話)。這里可以進行一些初始化操作。

          5.執行完4后,如果有表單提交,在這里將會取出那些值,賦給對應的字段。(注意:只是將表單中有的值賦過來)

          6.public void submit()
          如果有表單提交的話,在這里將進行對應的操作。因為此時各字段已經取好值了,所以可以拿來直接用。

          7.protected void prepareForRender(IRequestCycle cycle) {}
          最后才執行這個方法。我們可以在其中進行為了在頁面上顯示數據而進行的操作,比如取得什么對象什么的,因為這里頁面類的屬性賦值已經結束,可以直接拿來使用了。
          注意:如果執行了6,則還要執行4,再執行7。如果沒有6,4完了就直接是7。

          以上是我所總結的執行順序,不當之處請指出。

          -----------------------------------------------------

          最開始學tapestry的時候,覺得“怎么有這么多地方需要持久啊”。原來以前只知道pageBeginRender這個函數,什么初始化操作都放在它里面??墒撬窃谫x值之前執行,所以拿到的字段多都是空的,卻都以為是沒有持久化的緣故。所以在客戶端里放了一大堆的@Hidden,或者 session中持久,非常麻煩,,,對tapestry也產生的懷疑?,F在才知道那些需要取得客戶端傳來的參數的代碼,最好放在 prepareForRender里,很多不必要的持久都可以省掉了。

          posted on 2007-01-29 18:47 Tapestry 閱讀(276) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 侯马市| 磐安县| 余姚市| 崇阳县| 华亭县| 汤原县| 汉寿县| 连南| 吉林省| 增城市| 海晏县| 巴楚县| 涿州市| 南开区| 泽库县| 纳雍县| 华池县| 扎囊县| 佛冈县| 仙桃市| 兴山县| 彭泽县| 五台县| 江达县| 丰城市| 新和县| 镇坪县| 嫩江县| 泗洪县| 泸州市| 苍梧县| 五莲县| 喀什市| 即墨市| 大关县| 措美县| 武强县| 泰来县| 林州市| 年辖:市辖区| 蕲春县|