13 Mayıs 2015 Çarşamba

Spring Mvc + Farklı Türlerde Sıralama Çift Sıralama

     S.a. Arkadaşlar,
     Bugünkü yazımız yine sıralama ile ilgili olacaktır. Belki diyeceksiniz ne kadar da uzadı bu sıralama yazıları, fakat ben de projeyi geliştirdikçe yazıyorum. Doğal olarak aklıma farklı şeyler geldikçe hem geliştiriyorum. Geliştirmem bittikten sonra tekrar yazıyorum, daha sonra neler yapabilirim diye düşünüyorum. Her neyse lafı fazla uzatmaya gerek yok. Dün ve bir önceki yazımızda yine sıralamadan bahsetmiştik, fakat ilk sıralama yazımızda sadece isime göre sıralama yapıyordu. İkinci yazımızda ise isme göre küçükten büyüğe ve büyükten küçüğe doğru sıralama yapıyordu. Biz bunu, kodu "copy-past" ile genişletip soy isim ve telefon için de yapabilirdik, fakat bu temiz kod ilkesine ters düşerdi. Biz bunu acaba kodumuzu nasıl daha güzel yazabiliriz diye düşündük ve en son aşağıda anlatacağımız kodu yazmaya karar verdik. Muhakkak bu kodun geliştirilebilir yanı vardır. Fakat daha sonra bu kodları tekrar gözden geçirip eksikliklerimizi (refactoring) tamamlamaya çalışacağız. Şimdi kod kısmına geçelim artık.



      Jsp sayfası ile başlıyoruz. Daha önceden hatırlayacağınız üzere kodumuz:

   <thead>
          <tr>
           <td><a href="/HelloWorld/list/order/">sirala</a></td>
            <td><a href="a">Sirala[A-Z]</a></td>
           <td><a href="a">Sirala[0-9]</a></td>
        </tr>
     </thead>

   bu kodumuzu değiştirip en son getirdiğimiz hali:

      <c:forEach items="${orderList}" var="order">
    <td>
                  <a href="/HelloWorld/list/order/${order}">${order}${orderShape}</a>
             </td>
</c:forEach>

    Şimdi ise Controller sayfamıza geçelim. Burada ciddi değişiklikler yaptık. Öncelikle jsp sayfasında kullanacağımız ArrayList oluşturduk ve buraya değerler atadık.

         orderList.clear();//sayfayı yenilediğimizde birden fazla yazmasın diye
         orderList.add("Sırala");
         orderList.add("SıralaA-Z");
         orderList.add("Sırala0-9"); 

     Daha sonra path variable ile tıklanan linkin hangi olduğunu aldık ve onun çevirdiği değere göre gireceği kod kısmını belirledik. Path Variable daha önceki yazılarımızda ne olduğunu açıklamıştık. Jsp sayfasından Controller sayfasına değer alıyoruz diyelim kısaca. 

      boolean orderReverse=false; // Çift yönlü sıralama için tanımladık
@RequestMapping("/list/order/{order}")//order jsp sayfasinda tıklanan link
public ModelAndView orderBy(HttpServletRequest request, ModelMap model,
//PathVariable ile jsp-controller arasındaki değer alıyoruz
@PathVariable("order") String order)


      Daha önceki yazılardan da hatırlayacağımız üzere list sayfamız üzerinde değişiklikler yapıyoruz. Bu sefer de onlara ek olarak order(sıralama) ekledik ve daha sonra {order} tıklanan linkin değeri buraya gelir ve ona ait kod çalışır. Yoksa öbür türlü her türlü parametre için ayrı bir RequestMapping tanımlamak zorunda kalacaktık, fakat biz yaptığımız değişiklerle kodu epeyce azalttık. Şimdi o kodumuzu yazalım.

      if (orderReverse == false && order.equals("Sırala")) {
// orderShape parametresini düz/ters
orderShape = "DUZ1"; //göstermek amacıyla yazdık
System.out.print("1");
// eger orderReserve false ise bize alfabetik 
                                // true ise alfabenin tersi sıralama yapiyor
String vericek = "SELECT id,name,surname,phone 
                                                      FROM user ORDER BY name ASC";
rs = st.executeQuery(vericek);
// Burada ise değerimizi true yapıyoruz.
//  Çünkü tıkladığımızda ters sıralama yapabilsin
orderReverse = true;

} else if (orderReverse == true && order.equals("Sırala")) {
// yukarıdaki kodun ters mantığı burada da geçerlidir.
orderShape = "Ters1";
System.out.print("2");
String vericek = "SELECT id,name,surname,phone
                                                       FROM user ORDER BY name DESC";
rs = st.executeQuery(vericek);
orderReverse = false;

//soy isim sıralamasını alfabetik yapıyoruz
else if (orderReverse == false && order.equals("SıralaA-Z")) {
orderShape = "DUZ2";
System.out.print("3");
String vericek = "SELECT id,name,surname,phone
                                                       FROM user ORDER BY surname ASC";
rs = st.executeQuery(vericek);
orderReverse = true;

}
//soy isim sıralamasını alfabenin tersine göre yapıyoruz
else if (orderReverse == true && order.equals("SıralaA-Z")) {
orderShape = "Ters2";
System.out.print("4");
String vericek = "SELECT id,name,surname,phone 
                                                       FROM user ORDER BY surname DESC";
rs = st.executeQuery(vericek);
orderReverse = false;
}
//telefon sıralamasını küçükten büyüğe yapıyoruz
else if (orderReverse == false && order.equals("Sırala0-9")) {
orderShape = "Düz3";
System.out.print("5");
String vericek = "SELECT id,name,surname,phone
                                                         FROM user ORDER BY phone ASC";
rs = st.executeQuery(vericek);
orderReverse = true;
}
//telefon sıralamasını büyükten küçüğe yapıyoruz
else if (orderReverse == true && order.equals("Sırala0-9")) {
orderShape = "Ters3";
System.out.print("6");
String vericek = "SELECT id,name,surname,phone
                                                        FROM user ORDER BY phone DESC";
rs = st.executeQuery(vericek);
orderReverse = false;
}

       Burada elimizden geldiğince diğer yazılarımızdaki gibi açıklamaları kod içerisinde yazmaya çalıştık. Projemizi aşağıda yine yayınlayacağız. İsteyenler indirip üzerinde yine çalışabilirler. Şimdi de ekran çıktılarını verip, yazıyı sonlandıralım.


     

Resim-1
      Burada default değerler karşımıza çıkıyor. Hangi linke tıklarsak ona göre sıralama yapmış oluruz. Burada id'ye göre sıralama var. yani en son kayıt edilen en aşağıda yer alıyor.

 

Resim-2
      Şimdi Sırala linkimize tıklıyoruz ve ismin alfabetik haline göre sıralama yapıyoruz. Diğer linkler de otomatik olarak duz olarak değişiyor. Yani burada ismi alfabetik sıraladığımızı belirtiyoruz. 

Resim-3
    Bu sefer linke tekrar tıklandığında ortaya çıkan durum. Yani isimler alfabetik sıralamanın tersine göre sıralandı.Diğer linkler de ters olarak değiştirildi. Eğer ilgili link tıklanırsa ona göre sıralama yapılır.

Resim-4
     
       Dikkat ederseniz diğer resimlerde 1 rakamı varken bu resimde 2 rakamı yazılmıştr. Bunun sebebi soy isime tıklanmış olmasıdır. Kodu yazarken bunun farkında olabilmemiz için öyle yapmıştık.



Resim-5


      Burada 3 yazıyor. Bunun anlamı da telefon linkine tıklamış olmamız. Dikkat edecek olursak zaten düz3 ve telefon numaralarına göre sıralanmış veriler. 
   
       Şimdilik yazımızı burada bitiriyoruz. İyi çalışmalar dileriz.
       Proje Linki

Hiç yorum yok:

Yorum Gönder