Võ Văn Hải's blog

Chỉ có một điều tuyệt đối đó là mọi thứ đều tương đối…

Custom Tag JSP – Eclipse

Tham khảo: http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/JSPTags.html

Trong Eclipse tạo 1 project dạng Dynamic Web Project có tên MyCustomTag.

1. Custom tag đơn giản:

Tạo lớp SimpleTag.java trong gói vovanhai.wordpress.com với code như sau:

package vovanhai.wordpress.com;import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

public class SimpleTag extends TagSupport{
private static final long serialVersionUID = -7915931412637792661L;
@Override
public int doStartTag() throws JspException {
try {
JspWriter out=pageContext.getOut();
out.println(“<table border=’1′ width=’80%’>”);
out.println(“<tr><td>STT</td><td>Họ tên</td><td>Địa chỉ</td></tr>”);
out.println(“<tr><td>1</td><td>Nguyễn Văn Tèo</td><td>12 Nguyễn Văn Bảo</td></tr>”);
out.println(“<tr><td>2</td><td>Trần Văn Tý</td><td>1 Lê Lợi</td></tr>”);
out.println(“</table>”);
} catch (Exception e) {
e.printStackTrace();
}
return SKIP_BODY;
}
@Override
public int doEndTag() throws JspException {
return EVAL_PAGE;
}
}

Trong thư mục WEB-INF tạo 1 thư mục có tên tlds sau đó tạo 1 file có tên mySimpleTag.tld với nội dung như sau:

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE taglib
PUBLIC “-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2/EN”
http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd&#8221; ><taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>ví dụ tag đơn giản</short-name>

<tag>
<name>mytag</name>
<tag-class>vovanhai.wordpress.com.SimpleTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>

Tạo trang testTag.jsp để thử, code như sau:

<%@ taglib uri=”/WEB-INF/tlds/mySimpleTag.tld” prefix=”simple”%>
<%@ page language=”java” contentType=”text/html; charset=UTF-8″
pageEncoding=”UTF-8″%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”&gt;
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<title>Thử Custum Tag đơn giản</title>
</head>
<body>
<simple:mytag />
</body>
</html>

Kết quả sau khi triển khai trên Tomcat và vào url http://localhost:8080/MyCustomTag/testTag.jsp:

https://vovanhai.files.wordpress.com/2008/12/custag_01.png

2. Custom tag có kèm theo thuộc tính:

Tạo lớp TagAttrs.java trong gói vovanhai.wordpress.com với code như sau:

package vovanhai.wordpress.com;import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

public class TagAttrs extends TagSupport{
private static final long serialVersionUID = -1780170553645616494L;
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int doStartTag() throws JspException {
try {
JspWriter out=pageContext.getOut();
out.println(“<h1>Hello: “+id+” – “+name+”</h1>”);
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}
}

Trong thư mục WEB-INF\tlds tạo tập tin tagWithAttribites.tld có nội dung sau:

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE taglib
PUBLIC “-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2/EN”
http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd&#8221; ><taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>ví dụ tag có thuộc tính</short-name>
<tag>
<name>tagattrs</name>
<tag-class>vovanhai.wordpress.com.TagAttrs</tag-class>
<body-content>empty</body-content>
<attribute>
<name>id</name>
<required>true</required>
</attribute>
<attribute>
<name>name</name>
</attribute>

</tag>

</taglib>

Như vậy ở đây ta có 2 thuộc tính, id- bắt buộc phải có.

Hiệu chỉnh trang testTag.jsp như sau:

<%@ taglib uri=”/WEB-INF/tlds/mySimpleTag.tld” prefix=”simple”%>
<%@ taglib uri=”/WEB-INF/tlds/tagWithAttribites.tld” prefix=”tagatrs”%>
<%@ page language=”java” contentType=”text/html; charset=UTF-8″
pageEncoding=”UTF-8″%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”&gt;
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<title>Thử Custum Tag đơn giản</title>
</head>
<body>
<simple:mytag />
<br/>
<p>Tag với thuộc tính</p>
<tagatrs:tagattrs id=”001″ name=”Nguyễn Văn Tèo”/>
</body>
</html>

Kết quả thực thi:
https://vovanhai.files.wordpress.com/2008/12/custag_02.png

3. Body Tag

Tạo lớp MyBodyTag.java trong gói vovanhai.wordpress.com với code như sau:

package vovanhai.wordpress.com;

import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class MyBodyTag extends BodyTagSupport{
private static final long serialVersionUID = -401555450077441436L;

@Override
public int doAfterBody() throws JspException {
try {
BodyContent bodycontent = getBodyContent();
String body = bodycontent.getString();
JspWriter out = bodycontent.getEnclosingWriter();
if(body != null) {
out.print(body.toUpperCase());
}
} catch(IOException ioe) {
throw new JspException(“Error:”+ioe.getMessage());
}
return SKIP_BODY;
}
}

Trong thư mục WEB-INF\tlds tạo tập tin tagWithAttribites.tld có nội dung sau:

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE taglib
PUBLIC “-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2/EN”
http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd&#8221; >

<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>ví dụ tag đơn giản</short-name>
<tag>
<name>bodytag</name>
<tag-class>vovanhai.wordpress.com.MyBodyTag</tag-class>
<body-content>JSP</body-content>
</tag>
</taglib>

Tạo trang BodyTagExample.jsp có nội dung sau để thử

<%@ page language=”java” contentType=”text/html; charset=UTF-8″
pageEncoding=”UTF-8″%>
<%@ taglib uri=”/WEB-INF/tlds/stag.tld” prefix=”tbl” %>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”&gt;
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<title>Thử Custum Tag đơn giản</title>
</head>
<body>
<tbl:stag> ví dụ Body Tag</tbl:stag>
</body>
</html>

Nói chung vấn đề này còn liên quan đến nhiều kỹ thuật, bạn có thể tham khảo thêm ở trang web của SUN.

Chúc thành công!

3 Responses to “Custom Tag JSP – Eclipse”

  1. takeshi said

    Cam on ban nhe!

  2. hironakamuza said

    Em chào thầy!
    Thầy có ví dụ nào demo về việc upload file ảnh vào thư mục chỉ định trong root không thầy post cho chúng em tham khảo với ạ . Đại loại như ảnh được chọn được đưa vào thư mục image lấy được đường dẫn của nó là image/tên_file_ảnh.type-image . em đang vướng về vấn đề này khi làm một trang web bằng jsp . mong thầy giúp đỡ

  3. Thông Anh said

    Có 3 bước để tạo 1 custom tag
    1/ Tạo java class cho thừa kế lại TagSupport hoặc BodyTagSupport
    viết code Xữ lý bên trong các API của TagSupport hoặc BodyTagSupport
    2/ Tạo file.tld để diễn giải cách sử dụng cho custom tag (Đăng ký với server web)
    3/ import vào trang jsp -> gọi lại sử dụng

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: