Tag Library'e Giriş
Tag library View'in bir parçasıdır.
Tag Library ile dinamik tagler üretmeniz mümkündür. En basit haliyle
<yildiz:greeting/>
Olarak kullanılabilir. Yaptığımız örneklerde JSP sayfalarında kullanılmış olan Tag Libraryler;
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
Olup standart struts ile gelen ve WEB-INF klasöründe bulunan '.tld' dosyalarında tanımlı tagler kullanılmaktadır.
'.tld' dosyaları Tag Library Definition dosyalarıdır ve xml formatındadırlar.
JSP sayfalarında çokça kullanılan struts-html tagleri prefix (yani ön ek olarak) 'html' alarak kullanılırlar. Bir tag library JSP'de hangi prefix ile kullanılacaksa bu prefix attributesi ile belirtilir. Görüldüğü gibi struts-bean' deki tagler bean prefix'i ile kullanılırlar.
<bean:tagname atr1=...,...></bean:tagname> gibi...
Java size kendi taglarinizi de yaratmanıza olanak tanır. Mesela; Fantezi olsun diye söylüyorum, cevizde kullanıcıları listeleyen bir sayfa var. İşte o sayfa için her sayfada 10 adet kullanıcı görüntüleniyorsa database'e bağlanan,oradan değerleri alan ve belli html formatında table içine onları yayan tek bir tag yaratılabilir.Şöyle;
<ceviz:listmember start="20" listcount="10"> Ceviz kullanıcıları </ceviz:listmember>
İşte şuncacık kod parçası designer için databaseden 20. üyeden sonra olan 10 üyeyi alıp table'da basmaya yeter ve designer'ın bunun için kod yazmasına gerek yoktur. Designer'ın html ve sadece tag library'yi bilmesi yeterli olur.
Struts - Html Tag Library
struts-html.tld tag library ile JSP sayfalarında kullanılan tag'lere kısaca değineceğim.
<html:html> sayfaya bir <html> tagı yayar.
<html:errors/> Bu tag ise validasyonda oluşan hataları sayfaya basar.
<html:form> Tag sayfaya bir form tagı yayar.
<html:text property="isim"> Bu tag ile JSP sayfaya bir text field yayar.Diğer form elemanları isimlendirilirken de property attribute'si kullanılır.
<html:pasword> Tag bir password alanı koyar
<html:link> Bu tag <a> tagı ile bir hyperlink oluşturur.
<html:checkbox> Bir checkbox koyar.
<html:hidden> hidden form elementi yaratır.
<html:textarea> bir text alanı koyar.
<html:base/> Tag <base> tagını yaratır.Tag <head>' ın içinde yer alır.
Kendi Tag Library'mizi yaratalım
Kendi tagimizi yaratırken ve kullanırken şu koşullar gerekir;
JSP'de kullanırken JSP'ye yarattığınız tagi kullanabilmek için kullanılacak taglibrary'i belirtmek gerekir.
<%@ taglib uri="/WEB-INF/ceviz.tld" prefix="ceviz" %>
İşte bu satırlarla ceviz adında bir tld'yi ceviz prefix'i ile kullanacağız bunu belirledik.
Şimdi Tag Library'mize bir tag yaratalım ve ekleyelim.
import javax.servlet.jsp.tagext.TagSupport; import javax.servlet.http.*; import javax.servlet.jsp.*; public class YildizSignature extends TagSupport { public int doStartTag() throws JspException { try { pageContext.getOut().print("Yildizib will exist!<br/>DeliDingin"); } catch (Exception ex) { throw new JspTagException(ex.getMessage()); } return SKIP_BODY; } public int doEndTag() { return EVAL_PAGE; } }
Burada yeni bir tag yaratırken kullanılan class javax.servlet.jsp.tagext.TagSupport classıdır.
Class JSP sayfalarında kullanılan tag'in start ve end tagına rastlanıldığında nasıl davranacağını belirleyeceğimiz doStartTag() ve doEndTag() isimli metotları içermektedir.Basitçe bir html kodu bastırıyoruz.
Yarattığımız bu classı ceviz.tld'ye ekleyelim;
Kod:
<?xml version="1.0" encoding="ISO-8859-1" ?> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>Ceviz Tag Library</shortname> <info> Bu tag library'ye ve tag yarartmaya bir örnektir. </info> <tag> <name>YildizibSignature</name> <tagclass>YildizSignature</tagclass> <bodycontent>empty</bodycontent> </tag> </taglib>
İşte görüldüğü gibi bir xml dosyasıyla bu yaratılan tag'ı belirttik.<taglib> elementinin içine yaratılan tagler <tag> elementiyle belirtilerek konurlar.
Bir tag yarattık ve tag Library'ye koyduk şimdi de deneme yapalım.index.jsp'de yarattığınız taglib'i deklare edin;
<%@ taglib uri="/WEB-INF/ceviz.tld" prefix="ceviz" %>
sonrada <body> nin içinde;
<ceviz:YildizibSignature/>
Yazın JSP'yi kaydedin ve browserden isteyin.