2011-04-18 17 views
9

Quiero advertir al usuario de cualquier información no guardada en un formulario antes de que haga clic en un enlace para navegar fuera de la página actual, sin guardar. ¿Cuál sería un mejor enfoque para lograr esto en JSF, por lo que esta comprobación se realiza en un solo lugar para todas las páginas. Cualquier sugerencia es apreciada.Avisar al usuario de los datos no guardados en JSF

Respuesta

0

Lo que puede hacer es agregar un clic a todos sus enlaces. Con jQuery que podría hacer lo siguiente:

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

La aplicación JSF norma no proporciona facilidades para esto de la caja. Además, esto es más un problema del lado del cliente que un problema del lado del servidor, por lo que realmente tendrá que tomar un lenguaje del lado del cliente para esto, como JavaScript. Dado que escribir un código JavaScript compatible con navegador cruzado para este requisito funcional particular no es exactamente trivial, le gustaría usar una biblioteca de JavaScript para esto que tenga esto en cuenta, como jQuery.

Aquí hay un ejemplo completo de cómo se puede lograr esto con la ayuda de jQuery.

<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> 

basta con pegar esto en su plantilla <head> (y preferiblemente también refactorizar que prima <script> código en su propio archivo .js así, que se incluye por src atributo) y se va a trabajar independientemente de la página que tiene.

+1

Si está utilizando PrimeFaces, elimine la secuencia de comandos que carga jQuery. jQuery se incluye con PrimeFaces y se carga cuando utiliza los componentes de PrimeFaces en una página. Consulte [Cómo agregar jQuery a los resultados de PrimeFaces en Unkeught TypeErrors] (http://stackoverflow.com/questions/16166039/adding-jquery-to-primefaces-results-in-uncaught-typeerror-over-all-place) –

Cuestiones relacionadas