2009-08-22 8 views
3

Je développe une application web en utilisant A4J, Richfaces. Une de mes exigences est, je dois vérifier si l'utilisateur a changé des valeurs dans le formulaire quand il essaye de s'éloigner de la page.Intercepter a4j: commandButton request

J'ai des boutons de sauvegarde et d'annulation dans la page. J'utilise le bouton a4j:command pour annuler la fonctionnalité. En cliquant sur le bouton annuler devrait faire ci-dessous les choses

  1. Vérifiez si l'utilisateur a modifié quoi que ce soit sous la forme (ce que je fais en utilisant javascript et un drapeau si l'utilisateur a changé toutes les valeurs)
  2. boîte de confirmation d'affichage (javascript confirmer avec des valeurs « voulez-vous vraiment annuler les modifications - OUI NON ») lorsque l'utilisateur change de forme des valeurs
  3. Si l'utilisateur dit OUI, puis soumettre le formulaire en utilisant AJAX (en utilisant a4j)

Mon a4j le code du bouton de commande est comme ceci

<a4j:commandButton action="MyClass.cancel_action" 
    onclick="checkIsPageChanged()"/> 

La question ici est, tout en utilisant en utilisant a4j:commandButton, je ne peux pas appeler la fonction javascript intermédiaire (la fonction qui vérifie si l'utilisateur a mis à jour toutes les valeurs et affiche la boîte de confirmation), puis soumettre la demande à l'aide ajax. J'ai regardé le code généré par JSF et le code est comme (pas exactement, mais Syntact)

<input type="button" 
    onclick="checkIsPageChanged();AJAX.submit('')/> 

La chose est quand je clique sur le bouton, il appelle que checkIsPageChanged() et ne pas appeler AJAX.submit().

Toute solution de contournement pour cela va m'aider.

Merci d'avance.

Répondre

3

Pour être plus précis, nous pouvons utiliser:

onclick="if(!isPageChanged()) {return false}" 

De retour faux ne seront pas soumettre la demande.

+0

Votre code fonctionne, mais il convient de préciser que renvoyer 'true' ne soumettra pas non plus la demande. Voir https://community.jboss.org/thread/3755?start=0&tstart=0&_sscc=t En effet, 'onclick ="! IsPageChanged() "' ne fonctionnera pas. –

3

Utilisez a4j:jsFunction et appelez cela à partir de votre a4j:commandButton lorsque le checkIsPageChanged() renvoie la valeur true.

par ex.

<a4j:commandButton action="MyClass.cancel_action" 
    onclick="if(checkIsPageChanged()) { cancel(); }"/> 
<a4j:jsFunction name="cancel" action="MyClass.cancel_action"/>