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 ...
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...
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ế ươ ứ...
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...
Các b c đ t o m t classic Tagướ ể ạ ộ
(2)
G i th ra s d ng.ọ ẻ ử ụ
<%@ taglib prefix="show" uri="nikojava" %>
<html>   
<b...
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 ...
X lý n i dung trong classic tag (1)ử ộ
Đ nh nghĩa thông tin th .TLDị ẻ
<tag>   
<name>classic</name>   
<tag-class>my.Clas...
X lý n i dung trong classic tag (2)ử ộ
G i th ra s d ng.ọ ẻ ử ụ
<%@ taglib prefix="show" uri="nikojava" %>
<html>   
<body...
Đ 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 in...
Đ nh nghĩa thu c tính bên trong thị ộ ẻ
public class Classic extends TagSupport {   
private String friend;   
public int ...
Đ nh nghĩa thu c tính bên trong th (1)ị ộ ẻ
<tag>   
<name>classic</name>   
<tag-class>my.Classic</tag-class>   
<body-co...
Đ nh nghĩa thu c tính đ ngị ộ ộ
public class Classic extends TagSupport implements DynamicAttributes {
private Map<String,...
Đ nh nghĩa thu c tính đ ng (1)ị ộ ộ
<tag>   
<name>classic</name>
  <tag-class>my.Classic</tag-class>
  <body-content>empt...
L p l i ph n thân nhi u l nặ ạ ầ ề ầ
public class Classic extends TagSupport {   
private int counter;   
public int doSta...
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>...
B qua ph n còn l i c a trangỏ ầ ạ ủ
public class Classic extends TagSupport {
  public int doStartTag() throws JspExceptio...
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 ...
Câu h iỏ
Upcoming SlideShare
Loading in …5
×

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

455 views

Published on

Lập Trình Mạng Nâng Cao - Custom Tag

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
455
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
81
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

  1. 1. Custom Tag ThS Văn Thiên Hoàng
  2. 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. 3. Các d ng Custom Tagạ Tag Files Simple Tag handlers Classic Tag handlers
  4. 4. Classic Tag
  5. 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. 6. Mô hình phân c p trong x lý tagấ ử
  7. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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.ầ ạ ủ
  22. 22. Câu h iỏ

×