SlideShare uma empresa Scribd logo
1 de 22
Custom Tag
ThS Văn Thiên Hoàng
Mô hình công nghệ
Các mã g i tr c ti p Servletọ ự ế
Các mã g i Servlet không tr c ti p (JSP)ọ ự ế
Beans
Servlet/JSP
MVC v i s k t h p JSP, Servlet, Beanớ ự ế ợ
Custom tag
MVC v i Bean, Custom tag, và cácớ
framework h tr Structs ho c JSF.ỗ ợ ặ
ng D ngỨ ụ
đ n gi nơ ả
ng D ngỨ ụ
ph c t pứ ạ
Các d ng Custom Tagạ
Tag Files
Simple Tag handlers
Classic Tag handlers
Classic Tag
N i dungộ
Mô hình phân c p trong x lý tagấ ử
Các b c đ t o m t classic Tagướ ể ạ ộ
X lý n i dung trong classic tagử ộ
Đ nh nghĩa thu c tính gi a c p thị ộ ữ ặ ẻ
Đ nh nghĩa thu c tính bên trong thị ộ ẻ
Đ nh nghĩa thu c tính đ ngị ộ ộ
Đánh giá l i thạ ẻ
B qua ph n còn l i c a trang.ỏ ầ ạ ủ
Tóm t t.ắ
Mô hình phân c p trong x lý tagấ ử
Các b c đ t o m t classicướ ể ạ ộ
Tag
B c 1: viướ t m t l p k t th a l pế ộ ớ ế ừ ớ TagSupport và
vi t dè ph ng th cế ươ ứ doStartTag().
package my;
public class Classic extends TagSupport {  
public int doStartTag() throws JspException {    
try {     
pageContext.getOut().print("Hello from a classic tag handler!!");    
} catch (IOException e)
{      e.printStackTrace();    }
    return SKIP_BODY;  
}
}
Các b c đ t o m t classic Tag (1)ướ ể ạ ộ
Đ nh nghĩa t p tin (.TLD) miêu t tag trong thị ậ ả ư
vi n. Đ t t p tin này trong th m c WEB-INF.ệ ặ ậ ư ụ
<?xml version=“1.0” encoding=“UTF-8” ?>
<taglib ...>  
<uri>nikojava</uri>   
<tag>     
<name>classic</name>     
<tag-class>my.Classic</tag-class>
<body-content>empty</body-content>   
</tag>
</taglib>
Các b c đ t o m t classic Tagướ ể ạ ộ
(2)
G i th ra s d ng.ọ ẻ ử ụ
<%@ taglib prefix="show" uri="nikojava" %>
<html>   
<body>     
<show:classic />  
  </body>
</html>
X lý n i dung trong classic tagử ộ
tr l i h ng EVAL_BODY_INCLUDE đ s d ng ph nả ạ ằ ể ử ụ ầ
thân c a th .ủ ẻ
public class Classic extends TagSupport {   
public int doStartTag() throws JspException {     
try {       
pageContext.getOut().print("This is my body: ");     
} catch (IOException e)
{       e.printStackTrace();     }     
return EVAL_BODY_INCLUDE;   
}
}
X lý n i dung trong classic tag (1)ử ộ
Đ nh nghĩa thông tin th .TLDị ẻ
<tag>   
<name>classic</name>   
<tag-class>my.Classic</tag-class>
<body-content>scriptless</body-content>
</tag>
X lý n i dung trong classic tag (2)ử ộ
G i th ra s d ng.ọ ẻ ử ụ
<%@ taglib prefix="show" uri="nikojava" %>
<html>   
<body>     
<show:classic>Really useful contents!</show:classic>   
</body>
</html>
Đ nh nghĩa thu c tính gi a c p thị ộ ữ ặ ẻ
G i th ra s d ng.ọ ẻ ử ụ
public class Classic extends TagSupport {   
public int doStartTag() throws JspException
{     
pageContext.setAttribute("friend", "Nikos");     
return EVAL_BODY_INCLUDE;   
}
}
<%@ taglib prefix="show" uri="nikojava" %>
<html>   
<body>     
<show:classic>Hello my friend ${friend}!!</show:classic>
</body>
</html>
Đ nh nghĩa thu c tính bên trong thị ộ ẻ
public class Classic extends TagSupport {   
private String friend;   
public int doStartTag() throws JspException {     
try {       
pageContext.getOut().append("Hey you " + friend + "!!");     
} catch (IOException e)
{       e.printStackTrace();     }     
return EVAL_BODY_INCLUDE;   
}  
 public void setFriend(String friend) {     this.friend = friend;   }
}
Ph i đ nh nghĩa các ph ng th c thi t l pả ị ươ ứ ế ậ
Đ nh nghĩa thu c tính bên trong th (1)ị ộ ẻ
<tag>   
<name>classic</name>   
<tag-class>my.Classic</tag-class>   
<body-content>empty</body-content>
<attribute>     
<name>friend</name>
<required>true</required>
    <rtexprvalue>true</rtexprvalue>   
</attribute>
</tag>
<%@ taglib prefix="show" uri="nikojava" %>
<html>   
<body>     
<show:classic friend="Niko" />  
 </body>
</html>
Đ nh nghĩa thu c tính đ ngị ộ ộ
public class Classic extends TagSupport implements DynamicAttributes {
private Map<String, Object> map = new HashMap<String, Object>();   
public void setDynamicAttribute(String uri, String name, Object value)
{     map.put(name, value);   }
public int doStartTag() throws JspException {   
try {     
JspWriter out = pageContext.getOut();     
out.append("These are the dynamic attributes:");
    out.append("<ul>");     
for (Map.Entry<String, Object> element : map.entrySet())
{      out.append("<li>");       
out.append(element.getKey() + " " + element.getValue());⇒
      out.append("</li>");     
}     
out.append("</ul>>");   
} catch (IOException e) {     e.printStackTrace();   }   
return SKIP_BODY;
}
}
Đ nh nghĩa thu c tính đ ng (1)ị ộ ộ
<tag>   
<name>classic</name>
  <tag-class>my.Classic</tag-class>
  <body-content>empty</body-content>
  <dynamic-attributes>true</dynamic-attributes>
</tag>
<%@ taglib prefix="show" uri="nikojava" %>
<html>
  <body>
    <show:classic custom="tag" open="source" javafx="cool" />
  </body>
</html>
L p l i ph n thân nhi u l nặ ạ ầ ề ầ
public class Classic extends TagSupport {   
private int counter;   
public int doStartTag() throws JspException {     
counter = 0;
    return EVAL_BODY_INCLUDE;   
}
  public int doAfterBody() throws JspException {
    while (counter < 3) {
      counter++;
      return EVAL_BODY_AGAIN;
    }
    return SKIP_BODY;
  }
}
S d ng ph ng th c doAfterBody() đ th c hi nử ụ ươ ứ ể ự ệ
đánh giá l i th .ạ ẻ
L p l i ph n thân nhi u l n (1)ặ ạ ầ ề ầ
<tag>
  <name>classic</name>
  <tag-class>my.Classic</tag-class>
  <body-content>scriptless</body-content>
</tag>
<%@ taglib prefix="show" uri="nikojava" %>
<html>
  <body>
    <show:classic>Hello </show:classic>
  </body>
</html>
B qua ph n còn l i c a trangỏ ầ ạ ủ
public class Classic extends TagSupport {
  public int doStartTag() throws JspException {
    return EVAL_BODY_INCLUDE;
  }
  public int doEndTag() throws JspException {
    return SKIP_PAGE;
  }
}
<tag>
  <name>classic</name>
  <tag-class>my.Classic</tag-class>
  <body-content>scriptless</body-content>
</tag>
<%@ taglib prefix="show" uri="nikojava" %><html>  
<body> 
   (Start of page)
    <show:classic>Hello from a classic tag!</show:classic>
    (End of page) 
 </body></html>
Tóm t tắ
doStartTag đ c g i đ u tiên. Các giá tr tr l i cóượ ọ ầ ị ả ạ
th là:ể
EVAL_BODY_INCLUDE = đánh giá ph n thân m t l n.ầ ộ ầ
SKIP_BODY = b qua không đánh giá ph n thân th .ỏ ầ ẻ
doAfterBody đ c g i khi doStartTag() tr l i giáượ ọ ả ạ
tr 1. Nó tr l i các giá tr :ị ả ạ ị
EVAL_BODY_AGAIN = đánh giá l i ph n thân th l nạ ầ ẻ ầ
n a.ữ
SKIP_BODY = dùng đánh giá ph n thân th .ầ ẻ
doEndTag đ c g i l n cu i. Giá tr tr l i có thượ ọ ầ ố ị ả ạ ể
là:
SKIP_PAGE = b qua ph n còn l i c a trang.ỏ ầ ạ ủ
EVAL_PAGE = đánh giá ph n còn l i c a trang.ầ ạ ủ
Câu h iỏ

Mais conteúdo relacionado

Mais procurados

Ebook học Javascript cơ bản tới nâng cao
Ebook học Javascript cơ bản tới nâng caoEbook học Javascript cơ bản tới nâng cao
Ebook học Javascript cơ bản tới nâng caoTrung Thanh Nguyen
 
DVMS tạo module joomla 2.5
DVMS tạo module joomla 2.5DVMS tạo module joomla 2.5
DVMS tạo module joomla 2.5dvms
 
Bài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPT
Bài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPTBài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPT
Bài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPTMasterCode.vn
 
BÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPT
BÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPTBÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPT
BÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPTMasterCode.vn
 
Introduction to Hibernate Framework
Introduction to Hibernate FrameworkIntroduction to Hibernate Framework
Introduction to Hibernate FrameworkPhuoc Nguyen
 
Bai tap java_script-html-2016
Bai tap java_script-html-2016Bai tap java_script-html-2016
Bai tap java_script-html-2016viethoang89
 
Giao trinh java script
Giao trinh java scriptGiao trinh java script
Giao trinh java scripthieusy
 
Bat dau hoc lap trinh asp
Bat dau hoc lap trinh aspBat dau hoc lap trinh asp
Bat dau hoc lap trinh aspLam To
 
Tài liệu tìm hiểu jQuery dành cho người mới bắt đầu
Tài liệu tìm hiểu jQuery dành cho người mới bắt đầuTài liệu tìm hiểu jQuery dành cho người mới bắt đầu
Tài liệu tìm hiểu jQuery dành cho người mới bắt đầuLel Đặng Văn
 
Tu hoc javascript
Tu hoc javascriptTu hoc javascript
Tu hoc javascriptzingoncmu2
 
Bai Tap Thuc Hanh Javascript
Bai Tap Thuc Hanh JavascriptBai Tap Thuc Hanh Javascript
Bai Tap Thuc Hanh JavascriptSamQuiDaiBo
 
Giao trinh java_script (1)
Giao trinh java_script (1)Giao trinh java_script (1)
Giao trinh java_script (1)duynamit
 

Mais procurados (19)

Jsp java bean
Jsp   java beanJsp   java bean
Jsp java bean
 
Bai 09 Basic jsp
Bai 09 Basic jspBai 09 Basic jsp
Bai 09 Basic jsp
 
JSP and Database
JSP and DatabaseJSP and Database
JSP and Database
 
Ebook học Javascript cơ bản tới nâng cao
Ebook học Javascript cơ bản tới nâng caoEbook học Javascript cơ bản tới nâng cao
Ebook học Javascript cơ bản tới nâng cao
 
DVMS tạo module joomla 2.5
DVMS tạo module joomla 2.5DVMS tạo module joomla 2.5
DVMS tạo module joomla 2.5
 
Bài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPT
Bài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPTBài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPT
Bài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPT
 
BÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPT
BÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPTBÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPT
BÀI 3 Làm việc với JAVASCRIPT và JQUERY - Giáo trình FPT
 
Javascript and dom_html
Javascript and dom_htmlJavascript and dom_html
Javascript and dom_html
 
Introduction to Hibernate Framework
Introduction to Hibernate FrameworkIntroduction to Hibernate Framework
Introduction to Hibernate Framework
 
Bai tap java_script-html-2016
Bai tap java_script-html-2016Bai tap java_script-html-2016
Bai tap java_script-html-2016
 
Giao trinh java script
Giao trinh java scriptGiao trinh java script
Giao trinh java script
 
Bat dau hoc lap trinh asp
Bat dau hoc lap trinh aspBat dau hoc lap trinh asp
Bat dau hoc lap trinh asp
 
Giao Trinh Jquery
Giao Trinh JqueryGiao Trinh Jquery
Giao Trinh Jquery
 
Tài liệu tìm hiểu jQuery dành cho người mới bắt đầu
Tài liệu tìm hiểu jQuery dành cho người mới bắt đầuTài liệu tìm hiểu jQuery dành cho người mới bắt đầu
Tài liệu tìm hiểu jQuery dành cho người mới bắt đầu
 
Tu hoc javascript
Tu hoc javascriptTu hoc javascript
Tu hoc javascript
 
Bai Tap Thuc Hanh Javascript
Bai Tap Thuc Hanh JavascriptBai Tap Thuc Hanh Javascript
Bai Tap Thuc Hanh Javascript
 
Giao trinh java_script (1)
Giao trinh java_script (1)Giao trinh java_script (1)
Giao trinh java_script (1)
 
Kiem tra javascript
Kiem tra javascriptKiem tra javascript
Kiem tra javascript
 
Bài tập javascript
Bài tập javascriptBài tập javascript
Bài tập javascript
 

Semelhante a Bài 7,8: Custom Tag - Lập Trình Mạng Nâng Cao

Javascript tong-hop a-z
Javascript tong-hop a-zJavascript tong-hop a-z
Javascript tong-hop a-zManhh Nguyễn
 
Java script dh bk share-book.com
Java script dh bk   share-book.comJava script dh bk   share-book.com
Java script dh bk share-book.comphongbk1609
 
Shopping Cart Example (HTML + Javascript)
Shopping Cart Example (HTML + Javascript)Shopping Cart Example (HTML + Javascript)
Shopping Cart Example (HTML + Javascript)Ngô Thanh Tùng
 
Slide3 - Co ban HTML5
Slide3 - Co ban HTML5Slide3 - Co ban HTML5
Slide3 - Co ban HTML5Đặng Til
 
E learning lab - Tim hieu Cake PHP
E learning lab - Tim hieu Cake PHPE learning lab - Tim hieu Cake PHP
E learning lab - Tim hieu Cake PHPelearninglabvn
 
C S S & The Modern Web Design
C S S &  The  Modern  Web  DesignC S S &  The  Modern  Web  Design
C S S & The Modern Web DesignHiệp Lê Tuấn
 
Slide 1 - Thiết kế Web cơ bản
 Slide 1 - Thiết kế Web cơ bản Slide 1 - Thiết kế Web cơ bản
Slide 1 - Thiết kế Web cơ bảnSống Khác
 
tai lieu thiet ke website
tai lieu thiet ke websitetai lieu thiet ke website
tai lieu thiet ke websitenhatgiaoict
 
Bài 1 XHTML: Cấu trúc nội dung web - Giáo trình FPT
Bài 1 XHTML: Cấu trúc nội dung web - Giáo trình FPTBài 1 XHTML: Cấu trúc nội dung web - Giáo trình FPT
Bài 1 XHTML: Cấu trúc nội dung web - Giáo trình FPTMasterCode.vn
 
Kiến thức cần thiết làm việc
Kiến thức cần thiết làm việcKiến thức cần thiết làm việc
Kiến thức cần thiết làm việcmanhvokiem
 
Thiết kế dữ liệu
Thiết kế dữ liệuThiết kế dữ liệu
Thiết kế dữ liệuNguyen Tran
 
Bài 2 Cơ chế làm việc của CSS - Giáo trình FPT
Bài 2 Cơ chế làm việc của CSS - Giáo trình FPTBài 2 Cơ chế làm việc của CSS - Giáo trình FPT
Bài 2 Cơ chế làm việc của CSS - Giáo trình FPTMasterCode.vn
 
Slide 2 - Thiết kế Web cơ bản
Slide 2 - Thiết kế Web cơ bảnSlide 2 - Thiết kế Web cơ bản
Slide 2 - Thiết kế Web cơ bảnSống Khác
 

Semelhante a Bài 7,8: Custom Tag - Lập Trình Mạng Nâng Cao (20)

Javascript tong-hop a-z
Javascript tong-hop a-zJavascript tong-hop a-z
Javascript tong-hop a-z
 
Ajax
AjaxAjax
Ajax
 
Giao trinh java script
Giao trinh java scriptGiao trinh java script
Giao trinh java script
 
Java script dh bk share-book.com
Java script dh bk   share-book.comJava script dh bk   share-book.com
Java script dh bk share-book.com
 
Shopping Cart Example (HTML + Javascript)
Shopping Cart Example (HTML + Javascript)Shopping Cart Example (HTML + Javascript)
Shopping Cart Example (HTML + Javascript)
 
Slide3 - Co ban HTML5
Slide3 - Co ban HTML5Slide3 - Co ban HTML5
Slide3 - Co ban HTML5
 
Jquery
JqueryJquery
Jquery
 
E learning lab - Tim hieu Cake PHP
E learning lab - Tim hieu Cake PHPE learning lab - Tim hieu Cake PHP
E learning lab - Tim hieu Cake PHP
 
C S S & The Modern Web Design
C S S &  The  Modern  Web  DesignC S S &  The  Modern  Web  Design
C S S & The Modern Web Design
 
Graffiti CMS
Graffiti CMSGraffiti CMS
Graffiti CMS
 
Slide 1 - Thiết kế Web cơ bản
 Slide 1 - Thiết kế Web cơ bản Slide 1 - Thiết kế Web cơ bản
Slide 1 - Thiết kế Web cơ bản
 
tai lieu thiet ke website
tai lieu thiet ke websitetai lieu thiet ke website
tai lieu thiet ke website
 
Bài 1 XHTML: Cấu trúc nội dung web - Giáo trình FPT
Bài 1 XHTML: Cấu trúc nội dung web - Giáo trình FPTBài 1 XHTML: Cấu trúc nội dung web - Giáo trình FPT
Bài 1 XHTML: Cấu trúc nội dung web - Giáo trình FPT
 
Kiến thức cần thiết làm việc
Kiến thức cần thiết làm việcKiến thức cần thiết làm việc
Kiến thức cần thiết làm việc
 
Thiết kế dữ liệu
Thiết kế dữ liệuThiết kế dữ liệu
Thiết kế dữ liệu
 
Bài 2 Cơ chế làm việc của CSS - Giáo trình FPT
Bài 2 Cơ chế làm việc của CSS - Giáo trình FPTBài 2 Cơ chế làm việc của CSS - Giáo trình FPT
Bài 2 Cơ chế làm việc của CSS - Giáo trình FPT
 
Slide 2 - Thiết kế Web cơ bản
Slide 2 - Thiết kế Web cơ bảnSlide 2 - Thiết kế Web cơ bản
Slide 2 - Thiết kế Web cơ bản
 
Java script
Java scriptJava script
Java script
 
Yii
YiiYii
Yii
 
04 web course css
04 web course   css04 web course   css
04 web course css
 

Bài 7,8: Custom Tag - Lập Trình Mạng Nâng Cao

  • 1. Custom Tag ThS Văn Thiên Hoàng
  • 2. Mô hình công nghệ Các mã g i tr c ti p Servletọ ự ế Các mã g i Servlet không tr c ti p (JSP)ọ ự ế Beans Servlet/JSP MVC v i s k t h p JSP, Servlet, Beanớ ự ế ợ Custom tag MVC v i Bean, Custom tag, và cácớ framework h tr Structs ho c JSF.ỗ ợ ặ ng D ngỨ ụ đ n gi nơ ả ng D ngỨ ụ ph c t pứ ạ
  • 3. Các d ng Custom Tagạ Tag Files Simple Tag handlers Classic Tag handlers
  • 5. N i dungộ Mô hình phân c p trong x lý tagấ ử Các b c đ t o m t classic Tagướ ể ạ ộ X lý n i dung trong classic tagử ộ Đ nh nghĩa thu c tính gi a c p thị ộ ữ ặ ẻ Đ nh nghĩa thu c tính bên trong thị ộ ẻ Đ nh nghĩa thu c tính đ ngị ộ ộ Đánh giá l i thạ ẻ B qua ph n còn l i c a trang.ỏ ầ ạ ủ Tóm t t.ắ
  • 6. Mô hình phân c p trong x lý tagấ ử
  • 7. Các b c đ t o m t classicướ ể ạ ộ Tag B c 1: viướ t m t l p k t th a l pế ộ ớ ế ừ ớ TagSupport và vi t dè ph ng th cế ươ ứ doStartTag(). package my; public class Classic extends TagSupport {   public int doStartTag() throws JspException {     try {      pageContext.getOut().print("Hello from a classic tag handler!!");     } catch (IOException e) {      e.printStackTrace();    }     return SKIP_BODY;   } }
  • 8. Các b c đ t o m t classic Tag (1)ướ ể ạ ộ Đ nh nghĩa t p tin (.TLD) miêu t tag trong thị ậ ả ư vi n. Đ t t p tin này trong th m c WEB-INF.ệ ặ ậ ư ụ <?xml version=“1.0” encoding=“UTF-8” ?> <taglib ...>   <uri>nikojava</uri>    <tag>      <name>classic</name>      <tag-class>my.Classic</tag-class> <body-content>empty</body-content>    </tag> </taglib>
  • 9. Các b c đ t o m t classic Tagướ ể ạ ộ (2) G i th ra s d ng.ọ ẻ ử ụ <%@ taglib prefix="show" uri="nikojava" %> <html>    <body>      <show:classic />     </body> </html>
  • 10. X lý n i dung trong classic tagử ộ tr l i h ng EVAL_BODY_INCLUDE đ s d ng ph nả ạ ằ ể ử ụ ầ thân c a th .ủ ẻ public class Classic extends TagSupport {    public int doStartTag() throws JspException {      try {        pageContext.getOut().print("This is my body: ");      } catch (IOException e) {       e.printStackTrace();     }      return EVAL_BODY_INCLUDE;    } }
  • 11. X lý n i dung trong classic tag (1)ử ộ Đ nh nghĩa thông tin th .TLDị ẻ <tag>    <name>classic</name>    <tag-class>my.Classic</tag-class> <body-content>scriptless</body-content> </tag>
  • 12. X lý n i dung trong classic tag (2)ử ộ G i th ra s d ng.ọ ẻ ử ụ <%@ taglib prefix="show" uri="nikojava" %> <html>    <body>      <show:classic>Really useful contents!</show:classic>    </body> </html>
  • 13. Đ nh nghĩa thu c tính gi a c p thị ộ ữ ặ ẻ G i th ra s d ng.ọ ẻ ử ụ public class Classic extends TagSupport {    public int doStartTag() throws JspException {      pageContext.setAttribute("friend", "Nikos");      return EVAL_BODY_INCLUDE;    } } <%@ taglib prefix="show" uri="nikojava" %> <html>    <body>      <show:classic>Hello my friend ${friend}!!</show:classic> </body> </html>
  • 14. Đ nh nghĩa thu c tính bên trong thị ộ ẻ public class Classic extends TagSupport {    private String friend;    public int doStartTag() throws JspException {      try {        pageContext.getOut().append("Hey you " + friend + "!!");      } catch (IOException e) {       e.printStackTrace();     }      return EVAL_BODY_INCLUDE;    }    public void setFriend(String friend) {     this.friend = friend;   } } Ph i đ nh nghĩa các ph ng th c thi t l pả ị ươ ứ ế ậ
  • 15. Đ nh nghĩa thu c tính bên trong th (1)ị ộ ẻ <tag>    <name>classic</name>    <tag-class>my.Classic</tag-class>    <body-content>empty</body-content> <attribute>      <name>friend</name> <required>true</required>     <rtexprvalue>true</rtexprvalue>    </attribute> </tag> <%@ taglib prefix="show" uri="nikojava" %> <html>    <body>      <show:classic friend="Niko" />    </body> </html>
  • 16. Đ nh nghĩa thu c tính đ ngị ộ ộ public class Classic extends TagSupport implements DynamicAttributes { private Map<String, Object> map = new HashMap<String, Object>();    public void setDynamicAttribute(String uri, String name, Object value) {     map.put(name, value);   } public int doStartTag() throws JspException {    try {      JspWriter out = pageContext.getOut();      out.append("These are the dynamic attributes:");     out.append("<ul>");      for (Map.Entry<String, Object> element : map.entrySet()) {      out.append("<li>");        out.append(element.getKey() + " " + element.getValue());⇒       out.append("</li>");      }      out.append("</ul>>");    } catch (IOException e) {     e.printStackTrace();   }    return SKIP_BODY; } }
  • 17. Đ nh nghĩa thu c tính đ ng (1)ị ộ ộ <tag>    <name>classic</name>   <tag-class>my.Classic</tag-class>   <body-content>empty</body-content>   <dynamic-attributes>true</dynamic-attributes> </tag> <%@ taglib prefix="show" uri="nikojava" %> <html>   <body>     <show:classic custom="tag" open="source" javafx="cool" />   </body> </html>
  • 18. L p l i ph n thân nhi u l nặ ạ ầ ề ầ public class Classic extends TagSupport {    private int counter;    public int doStartTag() throws JspException {      counter = 0;     return EVAL_BODY_INCLUDE;    }   public int doAfterBody() throws JspException {     while (counter < 3) {       counter++;       return EVAL_BODY_AGAIN;     }     return SKIP_BODY;   } } S d ng ph ng th c doAfterBody() đ th c hi nử ụ ươ ứ ể ự ệ đánh giá l i th .ạ ẻ
  • 19. L p l i ph n thân nhi u l n (1)ặ ạ ầ ề ầ <tag>   <name>classic</name>   <tag-class>my.Classic</tag-class>   <body-content>scriptless</body-content> </tag> <%@ taglib prefix="show" uri="nikojava" %> <html>   <body>     <show:classic>Hello </show:classic>   </body> </html>
  • 20. B qua ph n còn l i c a trangỏ ầ ạ ủ public class Classic extends TagSupport {   public int doStartTag() throws JspException {     return EVAL_BODY_INCLUDE;   }   public int doEndTag() throws JspException {     return SKIP_PAGE;   } } <tag>   <name>classic</name>   <tag-class>my.Classic</tag-class>   <body-content>scriptless</body-content> </tag> <%@ taglib prefix="show" uri="nikojava" %><html>   <body>     (Start of page)     <show:classic>Hello from a classic tag!</show:classic>     (End of page)   </body></html>
  • 21. Tóm t tắ doStartTag đ c g i đ u tiên. Các giá tr tr l i cóượ ọ ầ ị ả ạ th là:ể EVAL_BODY_INCLUDE = đánh giá ph n thân m t l n.ầ ộ ầ SKIP_BODY = b qua không đánh giá ph n thân th .ỏ ầ ẻ doAfterBody đ c g i khi doStartTag() tr l i giáượ ọ ả ạ tr 1. Nó tr l i các giá tr :ị ả ạ ị EVAL_BODY_AGAIN = đánh giá l i ph n thân th l nạ ầ ẻ ầ n a.ữ SKIP_BODY = dùng đánh giá ph n thân th .ầ ẻ doEndTag đ c g i l n cu i. Giá tr tr l i có thượ ọ ầ ố ị ả ạ ể là: SKIP_PAGE = b qua ph n còn l i c a trang.ỏ ầ ạ ủ EVAL_PAGE = đánh giá ph n còn l i c a trang.ầ ạ ủ