JSF 2.0 – SelectOneMenu ve Enum Kullanımı

JSF 2.0 da bulunan selectOneMenu tagi ile sayfalarımıza kolay bir şekilde dropDownList bileşenleri ekleyebiliyoruz. JSF in sunduğu bu bileşen aslında Java tarafında bulunan pekçok veriyi listeleyebilecek yeterliliktedir.

Bu yazıda, JSF in sunduğu selectOneMenu taginde Enum değerlerin nasıl basitçe ve etkili bir şekilde listeleyebileceğimizi açıklamaya çalışacağım.

Yazıyı örnekler üzerinden sürdüreceğim için öncelikle selectOneMenu componentinde listelemek istediğimiz Enumumuzu oluşturalım.

public enum EnumIletisimYollari
{
    Email("E-Mail"),
    Telefon("Telefon"),
    SesKaydi("Ses Kaydı"),
    Fax("Faks");
 
    private String value;
    public EnumIletisimYollari(String value) {
        this.value = value;
    }
 
    public String getValue() {
        return value;
    }
}

Enumumuzu oluşturduktan sonra, ManagedBeanimizde selectOneMenu için JSF in sunmuş olduğu SelectItem veri modelimizi kullanarak enumumuzu hazırlayalım.

@ManagedBean
@ViewScoped
public class IletisimBean
{
    private List<SelectItem> enumIletisimYollari = new ArrayList<SelectItem>();
    private EnumIletisimYollari secilenEnum;
 
    @PostConstruct
    public void init()
    {
        enumModelle();
    }
    public void enumModelle()
    {
        EnumIletisimYollari[] eIletisimYollari = EnumIletisimYollari.values();
        for (int i = 0; i < eIletisimYollari.length; i++)
        {
            enumIletisimYollari.add(new SelectItem(eIletisimYollari[i].name(), eIletisimYollari[i].getValue()));
        }
    }
    //getter ve setterlar ve diğer methodlar
...
} // IletisimBean sınıfının sonu

ManagedBean ilk oluşturulduğunda @PostConstruct annotation ile işaretlenen init() methodumuz otomatik olarak çalıştırılacaktır. Böylece enumIletisimYollari alanımız otomatik olarak hazırlanacaktır.

Bu noktada JSF in bize sunduğu SelectItem veri modelinden biraz bahsetmemiz gerekir. Bu sınıf JSF içinde javax.faces.model paketi içerisinde tanımlıdır. Bu gibi modeller ile JSF, bizlere verileri belirli bileşenler için daha kolay yönetmemize izin verir. SelectItem modelini kullanmamızdaki amaç selectOneMenu bileşeninin içsel yapısına verimizi daha kolay entegre edebilmekten başka birşey değildir. Bu modeli kullanmadan da pekala istediğimiz gerçekleştirebiliriz. Yalnız bu modeli kullanarak verimizi selectOneMenu gibi bileşenlerde daha kolay modelleyebiliriz. Çünkü model bizlere, bileşenin ihtiyac duyduğu değer(value), label(etiket) ikilisini otomatik olarak hazırlar.

Böylece selectOneMenu bileşenine tıklandığında elde edeceğimiz enum değerini ve menüde gösterilecek etiketi(label) daha ilk planda belirleyebiliriz. Ben burada, selectOneMenu ye tıklandığında elde edilecek verinin değerini enum sabiti (eIletisimYollari[i].name()), listede gösterilecek etiketide enumun value alanı içerisinde bulunan değeri gösterecek şekilde ayarladım. Siz bunu kendi ihtiyaçlarınız için tekrar düzenleyebilirsiniz.

Ayrıca, SelectItem modelinin sunduğu diğer constructor methodlar, bizlere verimizi modellemede çok daha büyük esneklikler sağlar. Örneğin, biz yukarıda sadece 2 değer alan yapılandırıcıyı çağırdık. İstersek SelectItem sınıfının diğer yapılandırıcılarını çağırarak, hangi verilerin disabled olduğunu dahi daha model aşamasında belirtebiliriz.

Buraya kadar bir sorun yoksa artık verimizi XHTML sayfamızda nasıl görüntüleyebileceğimizi görmenin zamanı geldi sanırım.

<h:selectOneMenu id = "enumIletisimYollariId" value = "#{iletisimBean.secilenEnum}">
    <f:selectItem noSelectionOption = "true" itemLabel = "Seciniz" />
    <f:selectItems value = "#{iletisimBean.enumIletisimYollari}" />
</h:selectOneMenu>

Hepsi bu kadar. Artık dropDown listemiz hazır. Başka hiçbir ayar ek gerektirmeden Enum içindeki verilerimiz otomatik olarak selectOneMenu de gösterilecektir. Üstelik listeden herhangi bir eleman seçtiğimizde bu eleman beande tanımlı secilenEnum alanına set edilecektir.

İşin XHTML kısmında söylemem gereken tek şey selectOneMenu altında 2 iç tag kullandık. Bunlardan birincisi <f:selectItem ile başlayan tag, verileri tek tek listede göstermek için kullanılır. Ben yukarıda listeye bir ilk değer vermek için, “Seciniz” ifadesini göstermek için bu tagi kullandım. Listenin en başında bu değer gözükecek ve noSelectionOption attribute ile seçilebilir bir değer olmasını da engelliyoruz.

Diğer tag <f:selectItems ise bir liste benzeri veri kaynağını alarak içerisindeki verileri tek tek ekrana basmak için JSF in sunduğu bir diğer tagdir. Biz bu tag de biraz SelectItem modelinin ekmeğini yedik. Başka bir veri kaynağı kullansa idik, listenin seçileceği ve listede gözükecek değerin ne olmasını gerektiğini tek tek ayarlamak zorunda kalacaktık.

Umarım bu yazı, ihtiyacı olanların işine yarar. Kodları doğrudan WordPress kontrol panelinden yazdığım için bazı sözdizimi hataları olabilir. Bunları yorumlarda belirtebilir, başka önerilerde de bulunabilirsiniz pekala.

Bir başka yazıda görüşmek üzere..


İlgili Yazılar:

  1. JPA 2 Query Language (JPQL) LIKE Statement Kullanımı

Yorum bırakmak için buraya, Sitenizden trackback vermek için buraya tıklayabilirsiniz.

Leave a Reply