2010-01-07 6 views
0

Je rencontre des problèmes pour que le bouton de retour du navigateur fonctionne correctement sur le flux Web. La version de grails est 1.1.2. exemple de code Imaginez:Problème de flux Web Grails avec le bouton de retour du navigateur

def someFlow = { 
    ... 
    fillGroup { 
     on("addMember"){ 
     ... 
     }.to "fillMember" 
    } 
    fillMember { 
     on("addMember") { 
     ... 
     }.to "fillMember" 
     on("goToCart").to "showCart" 
    } 
    showCart { 
     ... 
    } 
} 

Maintenant, j'ajoute le groupe, plusieurs (> 1) membres et aller au panier. Le problème est que lors du remplissage des membres l'URL reste la même. Le paramètre d'exécution d'URL ne change que si l'état (vue) change. Par conséquent, Firefox se souvient que les pages FillMember sont regroupées en une seule page, car l'URL ne change pas. Par conséquent, le bouton de retour ne fonctionne pas correctement. Si je suis sur showCart et que je repousse, j'arrive à remplir la page Member. Une poussée supplémentaire du bouton retour renvoie fillGroup. J'en ai besoin pour parcourir toutes les pages de fillMember.

Existe-t-il un moyen de forcer le flux Web de Grails à modifier le paramètre d'exécution même si je suis redirigé vers le même état? Ou puis-je mettre mon propre paramètre dans l'URL?

J'ai trouvé une façon assez laide de faire cela: utiliser deux états fillMember - fillMember1 et fillMember2, tous deux faisant la même chose, l'un redirige vers un autre. Mais j'ai besoin d'un autre état d'action pour être capable de distinguer l'état réel quand je tape sur les boutons précédent et suivant. Cette construction fonctionne mais je préférerais un moyen plus simple.

Merci pour toutes les réponses

Tom

Répondre

2

Jusqu'à présent, la seule solution que j'ai trouvé est celui que je le disais. Utilisez deux états d'affichage, tous deux faisant exactement la même chose, et un état d'action pour contenir certaines informations d'état (il serait difficile de distinguer correctement un membre traité sans lui). Le code serait quelque chose comme ceci:

def someFlow = { 
    ... 
    fillGroup { 
     on("addMember"){ 
     ... 
     }.to "fillMemberLogic" 
    } 
    fillMemberLogic { 
     action { 
     ... 
     flow.stateinf += 1 
     if(flow.stateinf%2 == 1) 
      return gotoFillMember1() 
     else 
      return gotoFillMember2() 
     } 
     on("gotoFillMember1").to "fillMember1" 
     on("gotoFillMember2").to "fillMember2" 
    }  
    fillMember1 { 
     on("addMember") { 
     ... 
     }.to "fillMemberLogic" 
     on("goToCart").to "showCart" 
    } 
    fillMember2 { 
     on("addMember") { 
     ... 
     }.to "fillMemberLogic" 
     on("goToCart").to "showCart" 
    } 
    showCart { 
     ... 
    } 
} 

Depuis la vue est en cours de modification pour tous les membres, le paramètre d'exécution est en cours de modification et aussi URL est distincte pour chaque membre. Firefox distingue les pages vues en fonction de l'URL, de sorte que vous pouvez aller et venir dans tous les membres en utilisant les boutons Précédent et Suivant.

Le flux Web consiste à mapper l'URL avec l'état actuel de l'objet de flux. Par conséquent, il est facile de distinguer le membre actuel que vous traitez après plusieurs poussées de bouton arrière.