2011-04-18 20 views
9

Kaydedilmeden mevcut sayfadan ayrılmak için bir bağlantıyı tıklatmadan önce kaydedilmeyen tüm verileri kullanıcıyı uyarmak istiyorum. JSF'de bunu başarmak için daha iyi bir yaklaşım ne olurdu ki, bu kontrol tüm sayfalar için tek bir yerde yapılır. Herhangi bir öneri takdir edilir.JSF'de kaydedilmemiş verilerin kullanıcı uyarısı

cevap

0

Yapabilecekleriniz, tüm bağlantılarınıza bir onclick eklemektir. jQuery ile aşağıdaki işlemleri yapabilirsiniz:

$($('a').click(function(){ 
    if(unsavedWork){ 
     return confirm("You have not saved your work, would you like to leave anyway?"); 
    }else{ 
     return true; 
    } 
});); 
10

standart JSF uygulaması kutusunu bunun için imkanları dışarı sağlamaz. Ayrıca, bu bir sunucu tarafı sorundan daha çok müşteri tarafında bir konudur, bu yüzden JavaScript gibi bunun için bir istemci tarafı dili tutmanız gerekir. Crossbrowser uyumlu JavaScript kodunun bu özel işlevsel gereksinim için yazılması tam olarak önemsiz olduğundan, bunun için bir JavaScript kütüphanesi kullanmak istersiniz, bunun için de jQuery gibi.

İşte jQuery'nin yardımıyla bunu nasıl başarabileceğinizi gösteren tam bir başlangıç ​​örneğidir.

<script src="http://code.jquery.com/jquery-latest.min.js"></script> 
<script> 
    $(document).ready(function() { 
     // Set the unload message whenever any input element get changed. 
     $(':input').change(function() { 
      setConfirmUnload(true); 
     }); 

     // Turn off the unload message whenever a form get submitted properly. 
     $('form').submit(function() { 
      setConfirmUnload(false); 
     }); 
    }); 

    function setConfirmUnload(on) { 
     var message = "You have unsaved data. Are you sure to leave the page?"; 
     window.onbeforeunload = (on) ? function() { return message; } : null; 
    } 
</script> 

Sadece <head> şablonunda bu yapıştırın (ve tercihen de planı ayrı bunu da sen src özelliğiyle dahil olan kendi .js dosyası içine <script> çiğ kodu) ve ne olursa olsun sahip olduğunuz sayfanın çalışacağız.

+1

PrimeFaces kullanıyorsanız, jQuery'yi yükleyen komut dosyasını giderin. jQuery, PrimeFaces ile birlikte gelir ve bir sayfada PrimeFaces bileşenlerini kullandığınızda yüklenir. [Uncaught TypeErrors'ta PrimeFaces sonuçlarına jQuery ekleme] konusuna bakın (http://stackoverflow.com/questions/16166039/adding-jquery-to-primefaces-results-in-uncaught-typeerror-over-all-place) –