20 Kasım 2013 Çarşamba

JSF CUSTOM TAGS

JSF özel içerikler içeren hususi tagler oluşturmamıza izin vermektedir.Custom tag oluşturmanın adımları aşağıda ki gibidir.
Adım 1a. Bir xhtml dosyası oluşturup ui:composition tagini kullanan bir içerik hazırlanır
Adım 1b. Custom tag'in tanımlı olduğu bir xml dosyası oluşturulur.(taglib.xml)
Adım 1c. Bu tag library web.xml dosyasına kaydedilir
Bu adımları bir örnek üzerinde tatbik edelim.Mesela sıkça kullandığımız bir kayıt ekranının hazır form tagini yazalım.Form da ad ve soyad girilip  kayıt butonuna basıldığı zaman ManagedBean de bir kontrol sonucu bize "Hoşgeldiniz sayın Alimcan Karluk" gibi bir mesaj verecektir.

kayitFormu.xhtml

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
    <head>
        <title>TODO supply a title</title>
    </head>
    <body>
        <ui:composition>
            <h:form>
                <h:panelGrid border="0" columns="2">
                    <h:outputLabel value="Ad:"/>
                    <h:inputText value="#{kayitad}" required="true"
                                 requiredMessage="Lütfen adınızı giriniz!" />
                    <h:outputLabel value="Soyad:"/>
                    <h:inputText value="#{kayitFormKontrol.soyad}" required="true"
                                 requiredMessage="Lütfen soyadınızı giriniz!"/>
                    <h:commandButton value="Kaydet" action="#{kayitFormKontrol.giris()}"/>
                    <h:commandButton value="Temizle" type="reset"/>
                    <h:outputLabel value="#{kayitFormKontrol.sonuc}"
                                   style="color: blue;font-style: italic" />
                    <h:messages style="color: red; font: bolder" />
                </h:panelGrid>
            </h:form>
        </ui:composition>
    </body>
</html>

Bu xhtml sayfasını yazarak 1.adımı tamamlamış oluruz.Şimdi ikinci adım olan taglib.xml dosyasını yazalım.

formTaglib.xml

<facelet-taglib>
    <namespace>http://mesutemre.blogspot.com</namespace>
    <tag>
            <tag-name>kayitForm</tag-name>
            <source>tags/kayitFormu.xhtml</source>
    </tag>
</facelet-taglib>
Yazdığımız bu taglib.xml dosyasının web.xml dosyasına kaydı aşağıda ki gibi yapılır.Bu dosyada ki namespace ve tag-name ileride karşımıza çıkacaktır.

web.xml

<context-param>
        <param-name>facelets.LIBRARIES</param-name>
        <param-value>/WEB-INF/formTaglib.xml</param-value>
 </context-param>

Yazdığımız custom tag'in bir web sayfasında kullanımı aşağıda ki gibidir.

index.xhtml

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:kayitform="http://mesutemre.blogspot.com"
      >
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <kayitform:kayitForm kayitad="#{kayitFormKontrol.ad}"/>
        <br/>
        <h:outputText value="Her hakkı saklıdır."/>
    </h:body>
</html>

kayitFormu.xhtml sayfasında kullandığımız ManagedBean aşağıda ki gibidir.

KayitFormKontrol.java

package com.mesutemre;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean
@RequestScoped
public class KayitFormKontrol {

    private String ad,soyad;
    private String sonuc="";

    public String getSonuc() {
        return sonuc;
    }

    public void setSonuc(String sonuc) {
        this.sonuc = sonuc;
    }
   
    public String getAd() {
        return ad;
    }

    public void setAd(String ad) {
        this.ad = ad;
    }

    public String getSoyad() {
        return soyad;
    }

    public void setSoyad(String soyad) {
        this.soyad = soyad;
    }
   
    public void giris(){
        if(!ad.isEmpty() && !soyad.isEmpty()){
            sonuc+="Hoşgeldiniz sayın "+ad+" "+soyad;
        }
    }
}

Yazdığımız bu dosyalar aşağıda ki gibi lokalize edilir.


Uygulamanın çıktısı aşağıda ki gibi olur.