Bu yazımızda Primefaces kütüphanesinin datatable komponentini basitçe inceleyeceğiz ve bu derste sadece listeleme işlevini göreceğiz.
Bundan sonraki derslerde datatable’da listelenen bir kaydın güncellenmesini ve silinmesini inceleyeceğiz.
Yine Person örneğimiz üzerinden devam ediyoruz ve bir önceki derste oluşturulan person objesini outputtext ile göstermiştik, bu derste ise
bir datatable içine atıp oluşturulan person objelerini listeleyeceğiz.
Javada her nesne referans gösterildiği için, adrese dayalı bir çalışma şekli olduğu için person objesini her güncellediğimizde adresi güncellenmiş olacaktır.
Aşağıdaki kodda PersonView sınıfındaki displayPersonList metodunda da göreceğiniz gibi oluşturulan objeleri listeye attığımızda her yeni kayıt person referansına bağlı olduğundan dolayı bir önceki kayıtlar da en son güncellenen değere dönüşecektir. Bu gibi durumlarda obje klonlanmalıdır, yani kopyası alınabilmelidir. Dolayısıyla PersonBean sınıfı da cloneable bir sınıfa dönüştürülmelidir.
Çalışan kodlar aşağıdaki gibidir.
View Class
/** * */ package person.view; import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import person.bean.PersonBean; /** * @author kanbe * */ @ManagedBean @SessionScoped public class PersonView { PersonBean person; List<PersonBean> personList; @PostConstruct public void init() { personList = new ArrayList<PersonBean>(); person = new PersonBean(); person.setName("caglar"); person.setSurname("kanber"); person.setAge(27); // setPerson(new PersonBean("caglar", "kanber", 27)); } public void displayPersonList() { try { personList.add((PersonBean) person.clone()); } catch (CloneNotSupportedException e) { System.out.println(e.getMessage()); } } public List<PersonBean> getPersonList() { return personList; } public void setPersonList(List<PersonBean> personList) { this.personList = personList; } public PersonBean getPerson() { return person; } public void setPerson(PersonBean person) { this.person = person; } }
Bean Class
/** * */ package person.bean; import java.io.Serializable; /** * @author kanbe * */ public class PersonBean implements Serializable, Cloneable{ /** * */ private static final long serialVersionUID = -3071837601559699454L; private String name; private String surname; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public static long getSerialversionuid() { return serialVersionUID; } public PersonBean() { super(); // TODO Auto-generated constructor stub } public PersonBean(String name, String surname, int age) { super(); this.name = name; this.surname = surname; this.age = age; } public Object clone() throws CloneNotSupportedException { return super.clone(); } }
person.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui"> <h:head> <title>Primefaces Hello World Example</title> </h:head> <h:body> <h:form id="PersonalInf"> <h:panelGrid id="personGrid" columns="6"> <!-- Bilgiler aliniyor. --> <p:outputLabel for="name" value="İsim: "></p:outputLabel> <p:inputText id="name" value="#{personView.person.name}" /> <p:outputLabel for="surname" value="Soy İsim: "></p:outputLabel> <p:inputText id="surname" value="#{personView.person.surname}" /> <p:outputLabel for="age" value="Yaş: "></p:outputLabel> <p:inputText id="age" value="#{personView.person.age}" /> <p:commandButton id="submit" value="Listele" actionListener="#{personView.displayPersonList()}" update=":PersonalInf:personformTbl"></p:commandButton> </h:panelGrid> <p:dataTable id="personformTbl" value="#{personView.personList}" var="person" rows="10" paginator="true" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="5,10,15"> <p:column headerText="Ad"> <h:outputText value="#{person.name}" /> </p:column> <p:column headerText="Soyad"> <h:outputText value="#{person.surname}" /> </p:column> <p:column headerText="Yaş"> <h:outputText value="#{person.age}" /> </p:column> </p:dataTable> </h:form> </h:body> </html>
Kolay gelsin.
]]>Bu yazıda input text alanına alınan değerlerin bir buton yardımıyla güncellenerek outputtext komutuyla xhtml sayfasında gösteriminin bir örneğini uyguladım. Aynı zamanda update komutunun da birden fazla id’yi boşluk bırakarak güncellediğini yine örneğimizin xhtml sayfasında görebileceğiz. Görsel olarak detaylara takılmadan komutların nasıl çalıştıklarını örnek üzerinden göstermeye çalışıyorum.
Bean Class
/** * */ package person.bean; import java.io.Serializable; /** * @author kanbe * */ public class PersonBean implements Serializable{ /** * */ private static final long serialVersionUID = -3071837601559699454L; private String name; private String surname; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public static long getSerialversionuid() { return serialVersionUID; } public PersonBean() { super(); // TODO Auto-generated constructor stub } public PersonBean(String name, String surname, int age) { super(); this.name = name; this.surname = surname; this.age = age; } }
View Class
/** * */ package person.view; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import person.bean.PersonBean; /** * @author kanbe * */ @ManagedBean @SessionScoped public class PersonView { PersonBean person; @PostConstruct public void init() { setPerson(new PersonBean("caglar", "kanber", 27)); } public void updatePersonInf() { person.setName("Güncel " + person.getName()); person.setSurname("Güncel " + person.getSurname()); person.setAge(person.getAge()); } public PersonBean getPerson() { return person; } public void setPerson(PersonBean person) { this.person = person; } }
person.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui"> <h:head> <title>Primefaces Hello World Example</title> </h:head> <h:body> <h:form id="PersonalInf"> <h:panelGrid id="personGrid" columns="6"> <!-- Bilgiler aliniyor. --> <p:outputLabel for="name" value="İsim: "></p:outputLabel> <p:inputText id="name" value="#{personView.person.name}" /> <p:outputLabel for="surname" value="Soy İsim: "></p:outputLabel> <p:inputText id="surname" value="#{personView.person.surname}" /> <p:outputLabel for="age" value="Yaş: "></p:outputLabel> <p:inputText id="age" value="#{personView.person.age}" /> <p:commandButton id="submit" value="submit" actionListener="#{personView.updatePersonInf()}" update=":PersonalInf:outputName :PersonalInf:outputSurname :PersonalInf:outputAge"></p:commandButton> </h:panelGrid> <!-- Bilgiler gosteriliyor. --> <h:outputText id="outputName" value="#{personView.person.name} "></h:outputText> <h:outputText id="outputSurname" value="#{personView.person.surname} "></h:outputText> <h:outputText id="outputAge" value="#{personView.person.age}"></h:outputText> </h:form> </h:body> </html>
]]>
Ben bu yazıda java 8 ile primefaces 6.2’yi kullanacağım, yapılacak olan işlemler diğer sürümlerde de aynı olmaktadır.
Bize bu kurulum için gerekli olan dosyalar aşağıdadır;
-eclipse luna (EE)
-primefaces 6.2
-java 8(jdk 1.8.0_161 kullandıldı)
-jsf-api-2.2
-jsf-impl-2.2
-tomcat 8
Kuruluma gelecek olursak öncelikle Eclipse’te file->New->Dynamic Web Project dosya yolunu izleyerek aşağıdaki ekrana geliyoruz.
Project name alanına proje ismini yazacağız: Person
Ardından Configuration kısmına gelerek aşağıdaki ekranda java server faces’ı işaretleyeceğiz. Sonra altta bulunan Further configuration available yazısına tıklayacağız ve aşağıdaki ekran gelecektir.
Bu ekranda kırmızı yuvarlak içine alınmış icona tıkladığımızda gelen ekranda New butonuna tıklıyoruz ve New User Library ekranı karşımıza gelecektir. User library name alanına JSF yazıp OK butonuna tıklıyoruz.
Ardından aşağıdaki ekranda da gördüğümüz gibi oluşturduğumuz kütüphaneyi seçerek Add External Jars butonuna tıklayıp jsf-api-2.2 ve jsf-impl-2.2 jarlarını seçip OK butonuna tıklıyoruz.
Ardından gelen ekranda oluşturduğumuz JSF isimli kütüphaneyi seçip, Url Mapping Patterns alanında bulunan ifadeyi kaldırıp Add butonuna tıklayarak *.xhtml yazıyoruz ve Finish diyerek kurulumumuzu tamamlıyoruz.
Projede sağa tıklayıp, properties->Java build path->add jars dosya yolunu izleyerek primefaces jar dosyasını da yükledikten sonra artık örnek kodumuza geçebiliriz. (Jar dosyası webContent->Web-Inf->lib klasörü altında olmalıdır.)
Görseldeki dizine göre aşağıdaki kodları projemize ekliyoruz.
PersonBean
/** * */ package person.bean; import java.io.Serializable; /** * @author kanbe * */ public class PersonBean implements Serializable{ /** * */ private static final long serialVersionUID = -3071837601559699454L; private String name; private String surname; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public static long getSerialversionuid() { return serialVersionUID; } public PersonBean() { super(); // TODO Auto-generated constructor stub } public PersonBean(String name, String surname, int age) { super(); this.name = name; this.surname = surname; this.age = age; } }
PersonView
/** * */ package person.view; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import person.bean.PersonBean; /** * @author kanbe * */ @ManagedBean @SessionScoped public class PersonView { PersonBean person; @PostConstruct public void init() { setPerson(new PersonBean("caglar", "kanber", 27)); } public PersonBean getPerson() { return person; } public void setPerson(PersonBean person) { this.person = person; } }
person.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui"> <h:head> <title>Primefaces Hello World Example</title> </h:head> <h:body> <h:outputText value="#{personView.person.name} "></h:outputText> <h:outputText value="#{personView.person.surname} "></h:outputText> <h:outputText value="#{personView.person.age}"></h:outputText> </h:body> </html>
person.xhtml sayfasının üzerine gelip sağ tıklayıp Run as->Run on server yolunu izlediğimizde aşağıdaki çıktıyı alacağız.
Bu yazımızla beraber Primefaces kütüphanesini eclipse ortamına kurarak bir de basit örnek yapmış oldu, herkese kolay gelsin.
]]>/** * */ package com.java.egitim.split; /** * @author caglar * */ public class Split { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String str = "To be an engineer is hard," + " to be a computer engineer is harder."; /* * str stringini bosluk(space) karakterine gore parse ediyoruz. Parse * islemi ile beraber olusan yeni sub stringler parsedStr string * arrayinin elemanlari olmustur. split metodu icine backslash ("\\") * operatorlerini eklemeyi unutmayin. Aksi halde ozel karakterlerde * ('[',']','(',')'...) uygun olmayan kalip hatasi alacaksiniz. */ String[] parsedStr = str.split("\\ "); /* * Parse edilen ve parsedStr arrayinde tutulan sub stringler * listeleniyor. */ for (String tempParsedStr : parsedStr) { System.out.println(tempParsedStr); } } }]]>
/** * */ package com.java.egitim.hello.world; /** * @author caglar * */ public class HelloWorld { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub displayHelloWorld(); HelloWorld helloWorld = new HelloWorld(); helloWorld.displayHello(); } /* * static olmali ki dogrudan main icinde calistirilabilsin. */ public static void displayHelloWorld(){ System.out.println("Hello World"); } /* * static olmadigi halde obje uzerinden main icinde calistirilabilir. */ public void displayHello(){ System.out.println("Hello "); } }
Console Çıktısı:
Hello World
Hello
/** * */ package com.java.egitim.hello.world; /** * @author caglar * */ public class HelloWorld { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("Hello World--İlk Proje"); }
Console Çıktısı: Hello World–İlk Proje
]]>Ardından açılan sayfada
1)Class package ismi
2)Class ismi
3)Class’ın hangi metotlarının hazır olarak oluşturulması
4)Eclipse tarafından oluşturulan metotların default olarak yorum satırlarının oluşturulması gibi sık kullanılan özellikleri yönetebiliriz.
Kolaylık sağlaması açısından eğer kullanılacaksa main metodu seçilebilir. Biz de ilk class’ımız için main metodunu aktif ederek otomatik olarak oluşturduk.
Finish butonuyla class’ımızı görüntüleyebiliriz.
]]>
Ardından aşağıdaki gibi Proje İsmi girilip Finish butonuna tıklanmalıdır.
Projemiz oluştu artık kod yazmaya başlayabiliriz…
]]>/* * BY CAGLAR KANBER * DATE: 13.09.2012 * DESCRIPTION: * We find anagram words with this program. How can we find? * We have two strings. We compare if all of words these strings are the same. * Not important sorting. But one word can't be one more time in string. */ #include<stdio.h> #include<conio.h> #include<string.h> #define SIZE 100 int isCompare(char string1[],char string2[]); int main(void) { char string1[SIZE], string2[SIZE]; printf("Enter a string.\n"); gets(string1); printf("Enter one more string.\n"); gets(string2); if(isCompare(string1,string2)) printf("These strings are anagrams.\n"); else printf("These strings are not anagrams.\n"); getch(); return (0); } int isCompare(char string1[],char string2[]) { int length1, length2, counter, i,j; length1 = strlen(string1); length2 = strlen(string2); if(length1 != length2) return (0); for(i=0; i<length1; ++i) { counter = 0; for(j=0; j<length2; ++j) { if(string1[i] == string2[j]) counter +=1; } if(counter != 1) return (0); } return (1); }]]>
#include<stdio.h> #include<conio.h> #define SIZE 50 int length(char []); int main(void) { int size_of_a,size_of_b,i,j; char a[SIZE]="ali okula geldi.", b[SIZE]="ve veli "; printf("First string:"); printf("%s\n\n",a); printf("Second string:"); printf("%s\n\n",b); //lengths. size_of_a=length(a); size_of_b=length(b); //slide a string for adding b string. for(i=size_of_a; i>3; --i) { a[i+size_of_b]=a[i]; } //Add b string to a string. for(i=0;i<size_of_b;++i) { a[4+i]=b[i]; } printf("Added string:"); printf("%s", a); getch(); return 0; } //gets length of array. int length(char array[]) { int i=0; while( array[i]!='\0') ++i; return i; }]]>