Java ‘da (JSP) Tag Library Oluşturmak
JSP’de var olan hazır tag’lerin dışında programcılar da sık ihtiyaç duydukları yapılar için tag library oluşturup paketleyebilir ve sonra tekrar tekrar kullanabilir. Aşağıda Netbeans kullanılarak içeriği ve boyutu parametrik değiştirilebilen bir başlık kontrolü geliştirilmiştir.
TagLibrary’lere ilişkin bazı belirlemeler (içerik tutacak mı, attribute’leri neler olacak veya zorunlu mu olacak vb) .tld (tag library descriptor) uzantılı xml dosyalarla gerçekleştirilir. Netbeans’te proje ismi üzerine sağ tıklanıp açılan menüden “tag library descriptor” eklenmelidir.
Açılan pencerede isim, lokasyon, prefix ve uri tanımları yapılmalıdır.
Daha sonra projeye bir “tag handler” eklenmelidir bu işlem bir .java dosyası oluşturarak tag’in nasıl handle edileceğini yani sayfada kullanıldığında ne gerçekleştireceğini kodlamaya yarar. Burada sınıf ismi ve paket belirlemelerini yapınız.
Bu aşamada ise tag handler’ın tld dosyasıyla ilişkilendirilmesi, tag ismi ve attribute’lerinin isim ve türleri belirlenir. Böylece tld dosyası aşağıdaki gibi oluşacaktır :
[Baslik.tld]
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
<tlib-version>1.0</tlib-version>
<short-name>csd</short-name>
<uri>/WEB-INF/tlds/Baslik</uri>
<tag>
<name>Baslik</name>
<tag-class>paket.Baslik</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>size</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>int</type>
</attribute>
<attribute>
<name>content</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.String</type>
</attribute>
</tag>
</taglib>
Artık baslik.java yani handler dosyası geliştirilmelidir. Handler sınıfları içeriksiz tag’ler için SimpleTagSupport sınıfından türer. Böyle bir sınıfta attribute’ler veri elemanlarına ve setter fonksiyonlara karşılık gelir. Ayrıca doTag() isimli override edilen fonksiyon ise söz konusu tag’in nasıl bir html çıktısı üreteceğinin kodlandığı yerdir.
[Baslik.java]
package paket;
import java.io.IOException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class Baslik extends SimpleTagSupport {
private int size;
private String content;
public void setSize(int size) {
this.size = size;
}
public void setContent(String content) {
this.content = content;
}
public void doTag() throws JspException, IOException {
JspWriter out = getJspContext().getOut();
out.println("<h" + size + ">" + content + "</h" + size + ">" + "<hr>");
try {
JspFragment f = getJspBody();
if (f != null)
f.invoke(out);
} catch (java.io.IOException ex) {
throw new JspException("Error in Baslik tag", ex);
}
}
}
Bu şekilde oluşturulan tag’i bir jsp sayfasında test etmek gerekirse, sayfaya @taglib direktifiyle tag register edilmelidir. Burada uri ve prefix belirlemeleri yapıldıktan sonra söz konusu tag sayfada prefix:TagName sintaksıyla kullanılabilir, inceleyiniz :
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="WEB-INF/tlds/Baslik.tld" prefix="csd" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<csd:Baslik content="C ve Sistem Programcilari Dernegi" size="1" />
</body>
</html>
Not : Bu yazının word dokümanı halini zip olarak indirebilirsiniz.
Aykut TAŞDELEN
C ve Sistem Programcıları Derneği Eğitmeni
