f:ajax elementinin yazım kuralı aşağıdaki gibi gösterilebilir :
<f:ajax [event=”Literal”] [execute=”Literal | Value Expression”] [render=”Literal | Value Expression”] [onevent=”Literal | Value Expression”] [onerror=”Literal | Value Expression”] | [listener=”Method Expression”] [disabled=”Literal|Value Expression”] [immediate=”Literal|ValueExpression]/>
f:ajax elementinin attriubute'leri aşağıdaki gibidir :
f:ajax element'inde render ve execute özelliği için ön tanımlı olarak kullanılan ifadeler (keywordler) aşağıdaki gibidir :
<h:form prependId="false"> <h:commandButton action="#{ajax1Bean.increase}" value="Say"> <f:ajax execute="@form" render="countId" /> </h:commandButton> <h:outputText id="countId" value="#{ajax1Bean.count}" /> </h:form>Her düğmeye basılışta sayı bir arttırılmakta ve yazı alanında gösterilmektedir. @form ile tüm form yeniden server'a gönderilmekte , render özelliği ile countId yazı alanı tekrar render edilmektedir. Java bean aşağıdaki gibidir :
@ManagedBean(name = "ajax1Bean") @SessionScoped public class Ajax1Bean implements Serializable { private int count; public int getCount() { return count; } public void setCount(int count) { this.count = count; } public void increase() { count++; } }
Bu örnekte il seçildiği zaman, o ile ait olan ilçeler yüklenmektedir. Form bölümü aşağıdaki gibidir :
<h:selectOneMenu value="#{testBean.il}"> <f:selectItems value="#{testBean.iller}"></f:selectItems> <f:ajax event="change" render="ilce" ></f:ajax> </h:selectOneMenu> <h:selectOneMenu id="ilce" value="#{testBean.ilce}"> <f:selectItems value="#{testBean.ilceler}"></f:selectItems> </h:selectOneMenu>
Yukarıda görüldüğü gibi illerin listesi ve altında da ilçelerin listesini gösteren selectOneMenu bileşeni blunmaktadır. TestBean de gerekli bölüm aşağıdaki gibidir :
private String il; private String ilce; public List<SelectItem> getIller(){ List<SelectItem> a=new ArrayList<SelectItem>(); a.add(new SelectItem("0","Seçiniz")); a.add(new SelectItem("34","İstanbul")); a.add(new SelectItem("6","Ankara")); return a; } public List<SelectItem> getIlceler(){ List<SelectItem> a=new ArrayList<SelectItem>(); if(il==null){ return null; } if(il.equals("34")){ a.add(new SelectItem("1","Fatih")); a.add(new SelectItem("2","Beşiktaş")); a.add(new SelectItem("3","Kadıköy")); return a; }else if(il.equals("6")){ a.add(new SelectItem("1","Çankaya")); a.add(new SelectItem("2","Yenimahalle")); return a; } return null; }
İl listesinde bulundan f:ajax bileşeni, il seçimi yapıldığında çalışır ve ilce listesinin render edilmesini (yenilenmesini) sağlar. İlce listesi de seçilen ile göre yenilendiği için her il seçiminde ilçe değerleri tekrar yüklenmektedir
Aşağıdaki örnekte il , ilçe ve mahalle bilgilerini açılır listeye yükleyen örnek görülmektedir. İl seçince ilçeler, ilçeler seçince de iller dolmaktadır :
<h:form> <h:selectOneMenu value="#{testBean.il}"> <f:selectItems value="#{testBean.iller}"></f:selectItems> <f:ajax event="change" render="ilce mahalle" listener="#{testBean.sehirChanged}"></f:ajax> </h:selectOneMenu> <h:selectOneMenu id="ilce" value="#{testBean.ilce}"> <f:selectItems value="#{testBean.ilceler}"></f:selectItems> <f:ajax event="change" render="mahalle" listener="#{testBean.sehirIlceChanged}"></f:ajax> </h:selectOneMenu> <h:selectOneMenu id="mahalle" value="#{testBean.mahalle}"> <f:selectItems value="#{testBean.mahalleler}"></f:selectItems> </h:selectOneMenu> </h:form>
Yukarıda görüldüğü gibi illerin listesi ve altında da ilçelerin ve mahallelerin listesini gösteren selectOneMenu bileşeni blunmaktadır. TestBean de gerekli bölüm aşağıdaki gibidir :
@ManagedBean @SessionScoped public class TestBean { private String il; private String ilce; private String mahalle; public List<SelectItem> getIller(){ List<SelectItem> iller=new ArrayList<SelectItem>(); iller.add(new SelectItem("0","Seçiniz")); iller.add(new SelectItem("34","İstanbul")); iller.add(new SelectItem("6","Ankara")); return iller; } public List<SelectItem> getIlceler(){ if(il==null){ return null; } Listilceler=new ArrayList<SelectItem>(); ilceler.add(new SelectItem("0","Seçiniz")); if(il.equals("34")){ ilceler.add(new SelectItem("1","Fatih")); ilceler.add(new SelectItem("2","Beşiktaş")); ilceler.add(new SelectItem("3","Kadıköy")); return ilceler; }else if(il.equals("6")){ ilceler.add(new SelectItem("1","Çankaya")); ilceler.add(new SelectItem("2","Yenimahalle")); return ilceler; } return null; } public List<SelectItem> getMahalleler(){ if(ilce==null){ return null; } List mahalleler=new ArrayList (); if(mahalleler==null){ List<SelectItem> a=new ArrayList<SelectItem>(); ilceler.add(new SelectItem("0","Seçiniz")); for(int i=0;i<10;i++){ a.add(new SelectItem(i,il+"-"+ilce+"-Mahalle-"+i)); } return a; }else{ return mahalleler; } } public void sehirChanged(AjaxBehaviorEvent event){ ilce=null; mahalle=null; } public void sehirIlceChanged(AjaxBehaviorEvent event){ mahalle=null; } }
İl listesinde bulundan f:ajax bileşeni, il seçimi yapıldığında çalışır ve ilce ve mahalle listesinin render edilmesini (yenilenmesini) sağlar. İlçe seçildiğinde de mahalle listesi yenilenir