Yeni başlayacağımız bir proje için ZK Framework
kullanmaya karar verdik.Öncelikle biraz ZK dan bahsedelim.Bu framework bir ajax
framework ü olmakla birlikte tıpkı PrimeFaces gibi bize kullanmamız için
componentler verir.Fakat şunu söylemeliyim ki PrimeFaces daki componentler hem kullanılış
bakımından hem de sayıca ZK da ki
componentlerden kat be kat üstündür.
Bu framework de zul sayfasında component e
verdiğimiz id ile bu componente dair tüm ayarlamaları Java classlarından
yapabiliyoruz.Bu size Swing i hatırlatmış olmalı.Yani anlayacağınız Desktop
uygulaması yazar gibi Web uygulamaları yazıyorsunuz.
ZK ile alâkalı daha detaylı bilgiye buradan ulaşabilirsiniz.
Gelelim konumuza. Bu yazımda ki projede Eclipselink
ve ZK Framework ve MySQL database i kullandım.Amacım kitaplar
tablosuna bir arayüz den JPA ile kayıt atmak.Bu tabloda;
kitapid (INT)
kitapad (VARCHAR)
yazarad (VARCHAR)
kitaptur (VARCHAR)
kitapdurum (VARCHAR)
kitapimage (LONGBLOB)
kolonları bulunmaktadır.kitapimage
kolonu bilgisayardan seçilen bir resim dosyası ile dolacaktır.Yazımın devamında
yaptığımız bu kaydı ya da kayıtları bir Listbox
üzerinde göstereceğiz.Lafı fazla uzatmadan artık kodlamaya geçebiliriz.
Kitaplar.java
@Entity
@Table(name = "kitaplar")
@NamedQueries({
@NamedQuery(name = "tumkitaplarigetir", query = "SELECT k FROM
Kitaplar k"),
@NamedQuery(name = "findLastBook", query = "SELECT k FROM
Kitaplar k ORDER BY k.kitapId desc") })
public class Kitaplar implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "kitapid")
private int kitapId;
@Column(name = "kitapad")
private String kitapad;
@Column(name = "yazarad")
private String yazarad;
@Column(name = "kitaptur")
private String kitaptur;
@Column(name = "kitapdurum")
private String kitapdurum;
@Lob
@Column(name = "kitapimage")
private byte[] kitapimage;
public int getKitapId() {
return kitapId;
}
public void setKitapId(int kitapId) {
this.kitapId = kitapId;
}
public String getKitapad()
{
return kitapad;
}
public void setKitapad(String
kitapad) {
this.kitapad = kitapad;
}
public String getYazarad()
{
return yazarad;
}
public void setYazarad(String
yazarad) {
this.yazarad = yazarad;
}
public String getKitaptur()
{
return kitaptur;
}
public void setKitaptur(String
kitaptur) {
this.kitaptur = kitaptur;
}
public String
getKitapdurum() {
return kitapdurum;
}
public void setKitapdurum(String
kitapdurum) {
this.kitapdurum = kitapdurum;
}
public byte[] getKitapimage() {
return kitapimage;
}
public void setKitapimage(byte[] kitapimage) throws IOException {
this.kitapimage = kitapimage;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result
= prime * result + kitapId;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() !=
obj.getClass())
return false;
Kitaplar
other = (Kitaplar) obj;
if (kitapId != other.kitapId)
return false;
return true;
}
}
KitapIslemleriDaoImpl.java
public class
KitapIslemleriDaoImpl implements KitapIslemleriDao {
private static final String PERSISTANE_UNIT = "ZKDenemeJPA";
private EntityManagerFactory
emf;
private EntityManager em;
public
KitapIslemleriDaoImpl() {
emf = Persistence.createEntityManagerFactory(PERSISTANE_UNIT);
em = emf.createEntityManager();
}
@Override
public int findLastBookId() {
int k;
List<Kitaplar>
kitapList = this.findAllKitaplar();
if (kitapList.size() ==
0) {
k
= 1;
}
else {
List<Kitaplar>
kitaplarList = em.createNamedQuery("findLastBook")
.getResultList();
k
= kitaplarList.get(0).getKitapId();
}
return k;
}
@Override
public List<Kitaplar>
findAllKitaplar() {
Query query = em.createNamedQuery("tumkitaplarigetir");
return query.getResultList();
}
@Override
public void saveKitap(Kitaplar
kitap) {
em.getTransaction().begin();
em.persist(kitap);
em.flush();
em.getTransaction().commit();
em.close();
emf = Persistence.createEntityManagerFactory(PERSISTANE_UNIT);
em = emf.createEntityManager();
}
Model ve Dao muzu yazdıktan sonra artık kayıt sayfamızı
yapalım.
kitapKayit.zul
<window title="Kitap Kayıt
Formu" border="normal"
width="900px" apply="com.mesutemre.kitapIslemleri.KitapKayitControl">
<grid hflex="1">
<columns visible="false">
<column></column>
<column></column>
</columns>
<rows>
<row>
<label value="Kitap Adı"
/>
<textbox id="kitapAdId"
/>
</row>
<row>
<label value="Yazar Adı"
/>
<textbox id="yazarAdId"
/>
</row>
<row>
<label value="Kitap Türü"
/>
<combobox id="kitapTurId"
width="100px">
<template name="model">
<comboitem label="${each.kitaptur}" value="${each.kitaptur}" />
</template>
</combobox>
</row>
<row>
<label value="Raf
Durumu" />
<radiogroup id="rafDurumId">
<radio id="raftaId"
alue="Rafta" label="Rafta" selected="true"
>
<space width="20px"
/>
<radio id="raftaDegilId"
value="Rafta Değil" label="Rafta
Değil" />
</radiogroup>
</row>
<row>
<button id="uploadKitapImageFileId"
label="Kitap resmi yükle"
upload="true" />
</row>
<row spans="2"
align="center">
<hlayout>
<button id="saveButtonId"
label="Kaydet" />
<button id="clearButtonId"
label="Temizle" />
</hlayout>
</row>
</rows>
</grid>
</window>
KitapKayitControl.java
public class KitapKayitControl extends
SelectorComposer<Component> {
private static final long serialVersionUID = 1L;
private
List<Kitapturleri> kitapTurList = new ArrayList<Kitapturleri();
private
ListModel<Kitapturleri> kitapTurModelList;
KitapIslemleriDao
kid = new
KitapIslemleriDaoImpl();
@Wire
private Combobox kitapTurId;
@Wire
private Textbox kitapAdId;
@Wire
private Textbox yazarAdId;
@Wire
private Radiogroup rafDurumId;
@Wire
private Radio raftaId;
@Wire
private Radio raftaDegilId;
private org.zkoss.zul.Image image = new
org.zkoss.zul.Image();
AlphaNumericConstraint
anc = new
AlphaNumericConstraint();
@Override
public void
doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
kitapTurList = kid.findAllKitaptur();
kitapTurModelList = new ListModelList<Kitapturleri>(kitapTurList);
kitapTurId.setModel(kitapTurModelList);
raftaId.setParent(rafDurumId);
raftaDegilId.setParent(rafDurumId);
kitapAdId.setConstraint(anc);
yazarAdId.setConstraint(anc);
}
@Listen("onClick =
#saveButtonId")
public void saveKitap() {
Kitaplar
kitap = new Kitaplar();
int id = kid.findLastBookId();
if (image.getContent() != null) {
kitap.setKitapId(id
+ 1);
kitap.setKitapad(kitapAdId.getValue());
kitap.setYazarad(yazarAdId.getValue());
kitap.setKitaptur(kitapTurId.getSelectedItem().getValue()
.toString());
kitap.setKitapdurum(rafDurumId.getSelectedItem().getValue()
.toString());
try {
kitap.setKitapimage(image.getContent().getByteData());
}
catch (IOException e) {
e.printStackTrace();
}
kid.saveKitap(kitap);
alert("Kitap
kaydedildi");
}
else {
Messagebox.show("Lütfen kitap
resmi yükleyiniz!", "Hata Mesajı", 0,
Messagebox.EXCLAMATION);
}
}
@Listen("onUpload =
#uploadKitapImageFileId")
public void update(UploadEvent
ue) {
Image
imageY = (Image) ue.getMedia();
image.setContent(imageY);
}
@Listen("onClick =
#clearButtonId")
public void clearForm() {
kitapAdId.setRawValue(null);
yazarAdId.setRawValue(null);
raftaId.setChecked(true);
raftaDegilId.setChecked(false);
kitapTurId.setSelectedItem(null);
image = new
org.zkoss.zul.Image();
}
}
AlphaNumericConstraint.java
public class
AlphaNumericConstraint implements Constraint {
@Override
public void validate(Component
comp, Object value)
throws WrongValueException
{
if
(value.toString().isEmpty()) {
throw new
WrongValueException(comp, "Bu alan boş geçilemez!");
}
else {
if
(!value.toString().matches("^[a-zA-ZğüşöçıİĞÜŞÖÇ\\x20]+")) {
throw new
WrongValueException(comp, "Lütfen karakter giriniz!");
}
}
}
}
Constraint ler textbox a girdiğimiz değeri bir ajax
kontrolünden geçirir ve validasyonu ona göre yapar.
Hiç yorum yok:
Yorum Gönder