小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Tapestry的函數(shù)的執(zhí)行順序

 looline 2006-12-18

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

我覺得對初學(xué)者會有一些幫助。

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

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:調(diào)用的方法

7.protected void prepareForRender(IRequestCycle cycle) {}

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

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

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

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

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

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

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

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

以上是我所總結(jié)的執(zhí)行順序,不當之處請指出。

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

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

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多