http://vietjack.com/jsp /index.jsp Copyright © vietjack.com Custom Tags (Thẻ tùy biến) JSP Một custom tag phần tử JSP định nghĩa người sử dụng Khi JSP page chứa custom tag phiên dịch thành Servlet, thẻ biến đổi để hoạt động đối tượng gọi Tag Handler Sau đó, Web container triệu hồi hoạt động Servlet JSP page thực thi Sự kế thừa JSP tag giúp bạn tạo thẻ mà bạn chèn cách trực tiếp vào JSP page, bạn thực với thẻ có sẵn (built-in) chương trước giới thiệu JSP 2.0 Specification giới thiệu Simple Tag Handler để viết Custom Tag Để viết custom tag, đơn giản bạn kế thừa lớp SimpleTagSupport ghi đè phương thức doTag(), bạn đặt code bạn để tạo content cho thẻ Tạo thẻ “Hello” JSP Giả sử bạn muốn định nghĩa custom tag tên bạn muốn sử dụng kiểu mà khơng có phần thân sau: Để tạo Custom Tag JSP, bạn phải tạo lớp Java mà hoạt động Tag Handler Vì thế, tạo HelloTag class sau: package com.tutorialspoint; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport { } public void doTag() throws JspException, IOException { JspWriter out = getJspContext().getOut(); out.println("Hello Custom Tag!"); } Code có mã hóa đơn giản, với phương thức doTag() nhận đối tượng JspContext sử dụng phương thức getJspContext() http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/jsp /index.jsp Copyright © vietjack.com sử dụng để gửi “Hello Custom Tag!” tới đối tượng JspWriter Biên dịch lớp copy thư mục có sẵn biến mơi trường CLASSPATH Cuối cùng, tạo file thư viện thẻ sau: webapps\ROOT\WEB-INF\custom.tld 1.0 2.0 Example TLD Hello com.tutorialspoint.HelloTag empty Bây lúc sử dụng custom tag Hello định nghĩa chương trình JSP sau: A sample custom tag Thử gọi JSP cho kết sau: Hello Custom Tag! Truy cập phần thân thẻ JSP Bạn bao message phần thân Custom Tags bạn thấy với thẻ chuẩn Giả sử bạn muốn định nghĩa custom tag với tên bạn muốn sử dụng kiểu có phần thân thẻ: This is message body Chúng ta sửa đổi code chút để xử lý phần thân cho thẻ: package com.tutorialspoint; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/jsp /index.jsp Copyright © vietjack.com import java.io.*; public class HelloTag extends SimpleTagSupport { StringWriter sw = new StringWriter(); public void doTag() throws JspException, IOException { getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString()); } } Trong trường hợp này, kết từ triệu hồi, bắt vào StringWriter trước ghi tới JspWriter mà liên kết với thẻ Bây giờ, theo đó, cần thay đổi TLD file sau: 1.0 2.0 Example TLD with Body Hello com.tutorialspoint.HelloTag scriptless Chúng ta gọi thẻ với phần thân xác sau: A sample custom tag This is message body Nó cho kết quả: This is message body Thuộc tính Custom Tag JSP Bạn sử dụng thuộc tính đa dạng với thẻ custom tag bạn Để chấp nhận giá trị thuộc tính, lớp custom tag http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/jsp /index.jsp Copyright © vietjack.com cần triển khai phương thức setter, phương thức setter JavaBeans sau: package com.tutorialspoint; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport { private String message; public void setMessage(String msg) { this.message = msg; } StringWriter sw = new StringWriter(); public void doTag() throws JspException, IOException { if (message != null) { /* Use message from attribute */ JspWriter out = getJspContext().getOut(); out.println( message ); } else { /* use message from the body */ getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString()); } } } Tên thuộc tính “message”, thể phương thức setter setMessage() Bây thêm thuộc tính TLD file sử dụng phần tử sau: 1.0 2.0 Example TLD with Body Hello com.tutorialspoint.HelloTag scriptless http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/jsp /index.jsp Copyright © vietjack.com message Thử JSP với thuộc tính message sau: A sample custom tag Nó cho kết sau: This is custom tag Hy vọng ví dụ giúp ích cho bạn Bạn nên ghi nhớ bạn bao Property cho thuộc tính: Property Mục đích name Phần tử name định nghĩa tên thuộc tính Mỗi tê tính phải cho thẻ cụ thể required Xác định thuộc tính yêu cầu tùy ý false cho tùy ý rtexprvalue Khai báo giá trị runtime expression cho thu thẻ hợp lệ type Định nghĩa kiểu lớp Java cho thuộc tính Theo mặc xem String Miêu tả Sự miêu tả có tính thơng tin cung cấp fragment Khai báo giá trị thuộc tính nên đối xử JspFragment Ví dụ sau xác định Property liên quan tới thuộc tính trong: attribute_name false java.util.Date false Nếu bạn sử dụng hai thuộc tính, bạn sửa đổi TLD sau: http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/jsp /index.jsp Copyright © vietjack.com attribute_name1 false java.util.Boolean false attribute_name2 true java.util.Date http://vietjack.com/ Trang chia sẻ các bài học online miễn phí ... Thử gọi JSP cho kết sau: Hello Custom Tag! Truy cập phần thân thẻ JSP Bạn bao message phần thân Custom Tags bạn thấy với thẻ chuẩn Giả sử bạn muốn định nghĩa custom tag với tên ... Trang chia sẻ các bài học online miễn phí http://vietjack.com /jsp /index .jsp ... Trang chia sẻ các bài học online miễn phí http://vietjack.com /jsp /index .jsp