2016-11-16 26 views
0

Was ich versuche, ist in einem Grails-Filter zeigen eine Lade-Spinner-Grafik, während der Benutzer in der Datenbank erstellt wird. Es dauert eine Weile, um die Benutzeranmeldeinformationen abzurufen, und ich wollte ein Lade-Spinner anzeigen. Und dann, wenn der Benutzer in der db erstellt wird, möchte ich die ursprünglich angeforderte Seite anzeigen.Grails Redirect von Filter

Hier ist mein Problem: Ich habe einen Grails-Filter namens accessFilter.groovy. Im Vorher Abschnitt überprüfe ich, ob der Benutzer in der Datenbank ist. Und wenn nicht, dass ich dies tun:

if(!user){ 
     render(view:'/loadingCredentials') 
     return true 
    } 

Dann in der loadingCredentails.gsp nenne ich die Benutzer-Controller erstellen.

<body onload="callCreateUser()"> 
     <g:javascript> 
      function callCreateUser(){ 
       window.location = "admin/createuser" 
      } 
     </g:javascript> 
     <div> 
      <img alt="Loading..." src="images/puff.svg"></img> 
     </div> 
    </body> 

Die Steuerung geht aus und erstellt die Benutzer und leitet dann zurück zum Home-Controller (oder was auch immer Seite der Benutzer navigiert ursprünglich). Es zeigt den Spinner korrekt an, aber anstatt ihn oder den Benutzer zu erstellen und die angeforderte Seite zu rendern, erstellt er den Benutzer immer wieder neu.

Also meine Frage ist ... Gibt es eine Möglichkeit, dies zu arbeiten oder sollte ich ändern, wie ich das versuche, dies vollständig zu tun?

Antwort

1

Ich würde keinen Filter dafür verwenden. Wenn Sie eine bestimmte Aktion bearbeiten möchten, wäre ein Filter ein Overkill.

Ihr JS-Code sollte eine AJAX-Anfrage ausgeben und den Spinner starten, die Controller-Aktion würde die Anfrage akzeptieren und einen Benutzer erstellen (vielleicht mit einem transaktionalen Dienst) und die "OK" -JSON-Datei nach Beendigung zurückgeben.

Am Ende würde die onSuccess JS Callback den Spinner verstecken und vielleicht etwas anderes tun.

Es gibt Unmengen von Informationen über all diese Schritte, von trivial jQuery -basierte Lösungen im Bereich Single-Page-App mit einem ausgewachsenen JS MVC-Framework zur Ruhe betriebenen