1.自訂標籤延伸API部署於 javax.servlet.jsp.tagext套件中,其API類別圖如下:
|
自訂標籤API類別關係圖
|
- Tag File :
- 副檔名為tag、tagx
- 合法的body-content元素:empty | scriptless | tagdependent
- 只有Tag File才有的指令:tag 、attribute:、variable
- Containe會去哪裡找Tag File?
- /WEB-INF/tags目錄下
- /WEB-INF/tags的子目錄下
- /在WEB-INF/lib/下的JAR檔中的META-INF/tags目錄下
- /在WEB-INF/lib/下的JAR檔中的META-INF/tags子目錄下
- 若Tag file被部屬在jar檔中,JAR檔中的META-INF/TLDS必須有tld檔
- 詳細的實作設定可參考良葛格學習筆記-TLD檔案
- SimpleTagSupport:
- 在doTag()中,利用getJspContext()取得 JspContext後,可使用setAttribute,將value寫入 pageScope中.
- getJspBody.invoke(null),設定為null,表示資訊預設寫入getJspContext().getOut所取得的JspWriter中,整各指令作用為呼叫標籤主體。
- body-content不能為Jsp,即標籤的body不能使用Scripting.(包含<% %>,<%= %>, <%! %>等
- Classic Tag:
- Tag Support :
- 繼承此類別的標籤處理器,不具有修改bodyContent的能力
- 從IterationTag得到的doAfterBody()方法讓標籤處理器能重複繞行標籤主體
- doStartTag()、doAfterBody預設傳回SKIP_BODY(不評算主體)
- doStartTag()回傳EVAL_BODY_INCLUDE,表示評算主體
- doEndTag()回傳EVAL_PAGE,評算標籤結束後的剩餘頁面
- BodyTagSupport:
- 繼承此類別可直接存取主體內容並且以某種方式修改
- 當doStartTag()回傳EVAL_BODY_BUFFERED時,會先執行:
- setBodyContent(BodyContent)
- doInitBody()
- 再繼續評算標籤主體
- doStartTag()預設傳回EVAL_BODY_BUFFERED
- Classic Tag透過Tag.getParent()回傳Tag,故僅能有Classic Tag的父標籤
- 而SimpleTag透過SimpleTag.getParent()回傳的是JspTag,故其父標籤可以是Classic Tag或是SimpleTag
沒有留言:
張貼留言