程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 自定義jsp標簽,jsp標簽

自定義jsp標簽,jsp標簽

編輯:JAVA綜合教程

自定義jsp標簽,jsp標簽


 

 

  • jsp自定義標簽
    • 概述
    • 沒有標簽主題的標簽
    • 帶有標簽主體的標簽

概述

自定義標簽需要實現SimpleTag接口,在定義標簽的時候,只需要實現該接口的幾個方法就可以了.

  • ` void setJspContext(JspContext pc)
    • 默認傳入PageContext對象
    • 通過PageContext對象完成操作
  • void setParent(JspTag parent)
    • 如果有父標簽,則執行該方法,沒有的話,就不執行了
  • void setJspBody(JspFragment jspBody)
    • 把代表標簽體的JspFragment對象傳進來
  • void doTag()
    • 執行標簽

在調用自定義標簽的時候,會默認調用者幾個方法.而且執行是有順序的,順序就是上面這個樣子.
其中:
JspFragment代表某個對象中的部分JSP代碼,在simpleTag接口中,就是JSP標簽的正文部分.
JspFragment對象中有一個void invoke(Writer out)可以執行該片段,並將所有輸出定向到給定 Writer,如果 out 為 null,則將輸出定向到與該片段關聯的 JspContext 的 getOut() 方法返回的 JspWriter

沒有標簽主題的標簽

S1:實現一個類
java ee提供了一個SimpleTag的實現類,在使用的時候,可以直接繼承這個類,然後選擇需要的方法重寫就可以了.

package userDefinedJspTag;

import java.io.IOException;
import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class TagDemo1 extends SimpleTagSupport {

private PageContext pc;

@Override
public void setJspContext(JspContext pc) {
this.pc = (PageContext) pc;
}

@Override
public void doTag() throws JspException, IOException {
pc.getOut().print("hello");
}

}

S2:編輯TLD配置文件
跟自定義el函數差不多,只是這裡使用的是tag標簽.

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
<tlib-version>1.0</tlib-version>
<short-name>myfn</short-name>
<uri>http://www.thecatcher/mytag</uri>


<!-- 配置自定義標簽 -->
<tag>
<name>printHi</name>
<tag-class>userDefinedJspTag.TagDemo1</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>

S3:JSP文件中引入並使用

...
<%@ taglib uri="http://www.thecatcher/mytag" prefix="mytag"%>
...
<mytag:printHi/>

帶有標簽主體的標簽

帶有主體的標簽,跟不帶主題的標簽差不多.
doTag()方法裡,聲明一個JspFragment,然後invoke一下就可以了

public void doTag() throws JspException, IOException {
JspFragment jf = this.getJspBody();
// jf.invoke(pc.getOut());
//把這裡寫成null的話,服務器底還是會自動給丫傳入一個out的.
jf.invoke(null);
}

TLD的配置也有點不同,body-content這裡不能再寫empty了.
body-content有四個值可選:

  • empty:空,不帶主體
  • JSP:支持EL表達式,java代碼等的主體
  • scriptless:不支持java代碼,但是EL表達式等還是可以使用的.
  • tagdependent:不支持所有計算的模式. EL表達式中的計算不會進行解析.

使用EL表達式,jsp標簽的主要目的就是減少java代碼的使用. 所以帶主體的標簽最常用的這個屬性就是scriptless.

 <tag>
<name>out</name>
<tag-class>userDefinedJspTag.TagDemo2</tag-class>
<body-content>scriptless</body-content>
</tag>

使用的時候也很簡單,這樣就可以了.
<mytag:out>你好啊.</mytag:out>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved