Your SlideShare is downloading. ×
  • Like
Bài 7,8: Custom Tag - Lập Trình Mạng Nâng Cao
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

  • 137 views
Published

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

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

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
137
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
23
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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
  • 4. Classic Tag
  • 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.ầ ạ ủ
  • 22. Câu h iỏ