Java Teknolojileri
jsf ve primefaces ile dinamik datatable oluşturma

JSF ve Primefaces kullanarak herhangi bir sorguyu sayfada dinamik olarak listeleyen örnek aşağıdadır. Örneği çalıştırmak için mysql üzernde samples adlı abir veritabanı yaratıp aşağıdaki sql cümlecikleri ile tablo yaratıp ilk verilerimiz kopyalayalım

1. samples veri tabanı üzerinde users tablosu yaratalım

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  `fullname` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

2. tabloya verileri ekleyelim

INSERT INTO `users` (`id`, `username`, `password`, `fullname`, `email`) VALUES
(1, 'ibrahim', 'password', 'ibrahim demir', 'ibrahim@mail.com'),
(2, 'melih', 'password', 'melih sakarya', 'melih@mail.com'),
(3, 'levent', 'password', 'levent ergüder', 'levent@mail.com');

Veritabanı ile ilgili hazırlıklarımız tamam. Şimdi bu veriyi dinamik olarak okuyup herbir satırı Map üzerinde saklayan ve sonucu liste olarak döndürecek bir DataRetrived yazalım

DataRetriever

package org.javateknolojileri.samples.controller;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DataRetriever {

	private static final String JDBC_URL = "jdbc:mysql://localhost:3306/samples?characterEncoding=UTF-8";
	private static final String DRIVER = "com.mysql.jdbc.Driver";
	private static final String USERNAME = "root";
	private static final String PASSWORD = "";

	public static List<Map<String, Object>> populate(String sql,
			Object... params) {
		List<Map<String, Object>> data = new ArrayList<>();
		try {

			Class.forName(DRIVER);
			Connection connection = DriverManager.getConnection(JDBC_URL,
					USERNAME, PASSWORD);
			PreparedStatement pstmt = connection.prepareStatement(sql);
			if (params != null) {
				for (int i = 0; i < params.length; i++) {
					pstmt.setObject(i + 1, params[i]);
				}
			}
			ResultSet rs = pstmt.executeQuery();
			ResultSetMetaData rsmd = rs.getMetaData();
			while (rs.next()) {
				Map<String, Object> row = new HashMap<String, Object>();
				for (int i = 1; i <= rsmd.getColumnCount(); i++) {
					row.put(rsmd.getColumnLabel(i),
							rs.getObject(rsmd.getColumnLabel(i)));
				}
				data.add(row);
			}
			rs.close();
			pstmt.close();
			connection.close();

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return data;
	}

}

Şimdi sayfamızı ve onun ManagedBean'ini yazalım. Yukarıda ki sınıf her türlü sorgunuzu çalıştırıp dönecektir

<!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:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui">

<h:head>
	<title>User List</title>
</h:head>
<h:body>
	<p:dataTable value="#{dynamicTable.data}" var="row">
		<p:columns value="#{dynamicTable.data[0].keySet().toArray()}"
			var="key">
			<f:facet name="header">#{key}</f:facet>
			<h:outputText value=" #{row[key]}" />
		</p:columns>
	</p:dataTable>
</h:body>
</html>

liste için managedbean

package org.javateknolojileri.samples.controller;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(name = "dynamicTable")
@RequestScoped
public class DynamicDataTable {

	private static final String QUERY = "SELECT username,password,fullname FROM users";

	List<Map<String, Object>> data = new ArrayList<>();

	public DynamicDataTable() {
		
		data = DataRetriever.populate(QUERY);
	}

	public List<Map<String, Object>> getData() {
		return data;
	}

	public void setData(List<Map<String, Object>> data) {
		this.data = data;
	}

}

Yok ben primefaces kullanmam derseniz , JSF'de yazmanız gereken kod aşağıdaki gibidir

<!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:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:c="http://java.sun.com/jsp/jstl/core">

<h:head>
	<title>User List</title>
</h:head>
<h:body>
	<h:dataTable value="#{dynamicTable.data}" var="row">
		<c:forEach items="#{dynamicTable.data[0].keySet().toArray()}" var="fieldname">
        <h:column>
        	<f:facet name="header">#{fieldname}</f:facet>
          <h:outputText value="#{row[fieldname]}" /> 
        </h:column> 
    </c:forEach>
	</h:dataTable>
</h:body>
</html>
Operatörler

Operatörler değerler ve değişkenler üzerinde işlemler yapmak için kullanılırlar.Bu operatörleri beş ana grup altında toplamayabiliriz 

  • Aritmetik Operatörler (Arithmetic)
  • Atama Operatörleri (Assignment)
  • Karşılaştırma Operatörleri (Comparison)
  • Mantıksal Operatörler (Logical)
  • Bit Operatörleri (Bitwise)
Değişkenler (Variables)

Değişkenler (Variables) , program çalışırken veri depolamak için kullanılır

Veri Tipleri

Saklamak için gereken veriye bağlı olarak, birkaç veri tipi vardır. Java dilinde yerleşik olarak sekiz farklı veri tipi vardır. Bunlar ilkel (primitive) olarak adlandırılır.  Tam sayı (Integer)  tipleri byte, short, int ve longdur.Kayan noktalı (floating-point yada real numbers) tipindeki sayılar için float ve double tipleri mevcuttur.char tipi unicode karakter tutar ve birde boolean tipi var true yada false değeri saklar. Javada bu ilkel (primitive) tipler hariç herşey sınıf (class) , arayüz(interface) , yada dizi(array) olarak saklanır.


Derleme ve Çalıştırma

IDE ile çalıştırmak

"Merhaba Dünya" Uygulamasını tamamladıktan sonra iki yöntem ile çalıştırabilirsiniz. İlk seçenek kullanıdığınız IDE'nin menü çubuğundaki çalıştır (Run) düğmesi ile yapılır.Eclipsete çalıştır butonu bu şekildedir (Yeşil daire içinde beyaz üçgen) :

IDE "Merhaba Dünya" programını önce derleyip sonra çalıştıracaktır. Sonuç olarak Console'a "Merhaba Dünya" yazısını yazdıracaktır.

Merhaba Dünya

Kurulum

Java ile program yazmaya başlamadan önce ,Java Development Kit (JDK) Standart Editon (SE)'ını Oracle'ın sitesinden indirip kurmanız gerekiyor. JDK java derleyicisi, ve java programlarını çalıştırmak için sanal makinayı (vm) içerir. Java ile geliştirme yapmak için ücretsiz olan iki IDE'yi önerebilirim

  • Eclipse
  • Netbeans
  • IDE kullanmak istmeyenler için herhangi bir text editorü kullanabilirsiniz