Taglib 方法的執行

 開發自定義標籤的時候可以繼承TagSupport或着BodyTagSupport,實際上bodyTagSupport已經繼承了tagSupport這個類.

TagSupport:
當繼承TagSupport後,需要至少重寫doStartTag這個方法.這個方法將得到標籤起始時的一些信息,這個方法的合理返回值有兩個,分別爲EVAL_BODY_INCLUDE和SKIP_BODY,前者的意思爲執行標籤體的內容,而後者的意思爲跳過標籤體的內容.
其次:doAfterBody方法,該方法在每一次標籤體執行完成之後執行.其合法的返回值有:SKIP_BODY和EVAL_BODY_AGAIN.前者表示不再執行標籤體,後者表示再次執行標籤體.
再次爲doEndTag()該方法在標籤結束的時候調用,該方法的合法返回值有:SKIP_PAGE和EVAL_PAGE前者表示不再執行標籤之後的頁面內容,後者表示執行標籤後的內容.

用一個例子來說明之間的執行關係:

 

  

在這段代碼中,<logic:iterate id="user" name="users">系統執行doStartTag這個方法,其中id和name的值會被set到該標籤的實現類中.因爲這是一個處理循環的標籤,因此doStartTag需要進行是否需要進行標籤體的判斷.如果需要則返回EVAL_BODY_INCLUDE,否則執行SKIP_BODY.

參看代碼:

 

 

如果標籤爲一個循環,那麼系統將返回EVAL_BODY_INCLUDE,並且退出doStartTag這個方法,所以在這個時候,標籤體已經被執行了一次,當標籤體執行完一次以後,系統會再次調用doAfterBody這個方法,來判斷是否還需要進行標籤體的循環.
參考代碼:

 

 


如果仍然有循環,責再次執行標籤體,否則退出.

而doAfterTag則執行一些資源釋放等的工作.

具體的標籤調用如圖:

 

 

                                                                                                                                       張海傑

                                                                                                                                 2009-11-18

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章