Beranda > belajar komputer, Hibernate, java, kompi, Reference, Spring > Spring+Hibernate+Velocity pagination

Spring+Hibernate+Velocity pagination

Hm…penulis sdg melengkapi fitur CMS dg Java agar bisa menampilkan data dalam jumlah tertentu. Agar memudahkan user dalam melihat data, jangan sampai data di 1 tabel  muncul semua ke dalam tampilan 1 halaman web.

Tampilan seperti pada hasil pencarian Google sangatlah bagus dan dinamis. Tetapi untuk kebutuhan navigasi dengan menyediakan link previous dan next saja sudah lebih dari cukup. Tujuannya kan memudahkan melihat data. Untuk itu pada tulisan kali ini akan dijelaskan cara paging halaman web dg Java.

Persyaratan:
- Anda sudah memahami konsep OR-Mapping (Hibernate), Spring dan Velocity. Kalau belum anda bisa membaca tulisan ini.
- Tulisan ini meneruskan tulisan sebelumnya.

Kita akan menyimpan List hasil query data yang sudah dibatasi dengan LIMIT dalam object class Page, dengan kode seperti berikut:

import java.io.Serializable;
import java.util.List;
import org.hibernate.Query;

public class Page implements Serializable{
 private List results;
 private int pageSize;
 private int page;

 public Page(Query query, int page, int pageSize) {
 this.page = page;
 this.pageSize = pageSize;
 results = query.setFirstResult(page * pageSize).setMaxResults(
 pageSize + 1).list();

 }

 public boolean isNextPage() {
 return results.size() > pageSize;
 }

 public boolean isPreviousPage() {
 return page > 0;
 }

 public List getList() {
 return isNextPage() ? results.subList(0, pageSize - 1) : results;
 }

 public int getPageSize() {
 return pageSize;
 }

 public void setPageSize(int pageSize) {
 this.pageSize = pageSize;
 }

 public int getPage() {
 return page;
 }

 public void setPage(int page) {
 this.page = page;
 }

}

Sumber: Gavin King blog

Class Page di atas akan melakukan eksekusi query yang diberikan oleh DAO dan menampung hasilnya dalam List. Kemudian list hasil query ini akan dipakai buat navigasi next dan previous.

Contoh penggunaan dalam class DAO-nya seperti berikut ini. Modifikasi untuk class CategoryDAO:

@Repository(“categoryDaoHibernate”)
@Transactional@Autowired
private SessionFactory sessionFactory;

public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public Page getCategories(int start, int count){
Query query = sessionFactory.getCurrentSession().createQuery(“from Category”);
return new Page(query, start, count);
}

}

Nah, kemudian di Controller tinggal panggil object DAO dan eksekusi method getCategories(). Hasilnya ditaruh ke object map agar sampai ke View. Berikut modifikasi pada class CategoryController.

@Controller
public class CategoryController {
private ICategoryDAO categoryDAO;

@Autowired
public void setCategoryDAO(@Qualifier(“categoryDaoHibernate”) ICategoryDAO iCategoryDAO) {

this.categoryDAO = iCategoryDAO;

}

@RequestMapping(“/categorylist”)
public ModelMap list(@RequestParam(value="page", required=false) Integer start){

if(start == null) start = 1;
start--;

ModelMap map = new ModelMap();
Page page = categoryDAO.getCategories(start, 15);
map.addAttribute("page", page);

return map;
}

}

Dengan demikian maka object page bisa kita akses dari view. Berikut adalah modifikasi pada file categorylist.html ada tambahan kode pagination dg velocity template.

<div id="pagination">
#set($next = $page.page + 2)

#if($page.isPreviousPage())
<<
<a href="categorylist?page=$!page.page">
previous</a> -
#end
#set($x = $page.page + 1)
&nbsp; page: $x &nbsp;
#if($page.isNextPage())
-
<a href="categorylist?page=$!next">
next</a>>>
#end
</div>

<table border=“0″ cellpadding=“2″ cellspacing=“2″>
<tr>
<th>Name</th>
<th&nbsp;</th>
<th>Number of Items</th>
</tr>
#foreach($category in $page.list)
<tr>
<td>$category.Name</td>
<td><a href=“categoryform?category_id=$category.Id”>edit</a> | <a href=“categorydel?category_id=$category.Id”>hapus</a></td>
<td>numberOfSubCategories</td>
</tr>
#end
<tr>
<td><a href=“categoryform”>Add</a> </td>
</tr>
</table>

Seharusnya akan membentuk navigasi: <<previous  page:3   next>>, menyesuaikan jumlah data.

Semoga bermanfaat;

DM

  1. njum
    Oktober 18, 2010 pada 7:57 am | #1

    Wah, mantab nih tutorialnya.
    Btw ko datanya hilang 1 record ya tiap page, misalnya total record 15, total dalam 1 page 5 record.
    Logikanya di tiap page ada 5 record, nah yang terjadi di sini pada page 1 cuma ada 4(1-4) record(record ke 5 hilang), pada page 2(6-9) record(record k 10 hilang) dan seterusnya.

    Terima kasih

  1. Belum ada trackback.

Tinggalkan Balasan

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Ubah )

Twitter picture

You are commenting using your Twitter account. Log Out / Ubah )

Facebook photo

You are commenting using your Facebook account. Log Out / Ubah )

Connecting to %s

Ikuti

Get every new post delivered to your Inbox.

Bergabunglah dengan 75 pengikut lainnya.