Sunday, 15 February 2009

Back Tuşu, Back Tuşu, Bulunmaz eşin

Back'i engellemek daha doğrusu aynı formun ikinci kez submit edilmemesi için token kullanmıştım. Token hala daha sağlıklı çözüm olarak görünüyor. Ama yine de js ile işi halletmek durumunda kalınabilir diye başka bir not daha alayım buraya. Bir gün lazım olabilir.

html'in head kısmına aşağıdaki js'i ekliyoruz.

var backPressed = 1;

window.onbeforeunload = fn_unload;

function fn_unload(){
if(backPressed == 1){
window.location.reload();
}
}


Böylece sayfa unload etmeden önce çağırdığı fn_unload fonksiyonu vasıtasıyla tekrar reload oluyor. backPressed diye tanımladığımız parametreyi ise normal navigasyon işlemlerinde yine aynı ekranı reload etmesin diye kullanıyoruz. Yani ekrandaki bir linke basmadan önce backPressed'i 1 haricindeki bir değere set ediyoruz. Böylece, biz istediğimiz zaman ekran unload olabiliyor, başka türlü back tuşu vs. ile ekran terkedilmeye çalışıldığında aynı ekran tekrar reload oluyor.

Bir formun submit'inden sonra açılan bir ekrana bunu koyarsak back tuşuna basınca aynı ekranı tekrar reload edeceğinden formu double submit etmiş oluruz. O nedenle submit sonrası araya başka bir ekran koyup o aradaki ekranın forward yaparak istediğimiz ekrana ulaşmasını sağlayabiliriz. Yani form submit edildiğinde içinde sadece

response.sendRedirect("success.jsp");

olan bir jsp ile asıl gitmek istediğiniz success.jsp'ye ulaşabilirsiniz. Yukarıda eklediğimiz kod ile de success.jsp'de back tuşuna basılınca bu ekranı tekrar reload edebilirsiniz.

backPressed diye bir parametre kullanmak istemiyorsak

window.onbeforeunload = null;

da kullanılabilir.

No comments: