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

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

on

  • 242 views

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

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

Statistics

Views

Total Views
242
Views on SlideShare
242
Embed Views
0

Actions

Likes
0
Downloads
11
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • 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ỏ