2012-07-07 5 views
1

Je suis nouveau à Grails et eu un problème avec la g: commande formRemote ..Grails formRemote réoriente plutôt que de simplement appeler la méthode

Je veux ag: boîte textArea envoyer un message à mon contrôleur et enregistrer ce message . Ensuite, la page doit être mise à jour via le formulaireRemote Ajax, de sorte que les messages apparaissent sur la page.

Mais au lieu de mettre à jour la page, l'appel formRemote suppose que l'URL donnée est un lien réel et veut que je redirige vers ce site .jsp (inexistant).
La méthode que je veux commencer est appelé dans mon contrôleur tho

J'ai essayé beaucoup de solutions proposées dans des problèmes similaires, mais il semble que ce problème est différent du leur

Heres le code:

<div id="history"> 
    <g:render template="posts" collection="${ messages }" var="message" /> 
</div> 
<div class="postMessageForm"> 
    <g:formRemote name="postChatMessage" url="[controller: 'meetingRoom', 
        action: 'postMessage']" update="history">        
    <div class="msg_box"> 
     <g:textArea name="message" value="" style="width: 630px"/><br/> 
    </div> 
    <div style="float: right;"> 
     <g:submitButton name="Send" style="width: 90px; height: 40px;"/> 
    </div> 
    </g:formRemote> 
</div> 

et c'est l'action qui est appelé dans mon MeetingRoomController:

def postMessage() { 
if (params.message != "") { 
    def thisUser = lookUpUser() 
    def thisRoom = thisUser.joinedRoom 
    def chatPost = new ChatPost(
     message: params.message, 
     author: thisUser 
    ) 
    thisRoom.addToChatHistory(chatPost) 
} 
// def messages = currentChatHistory() 
// render template: 'posts', collection: messages, var: 'message' 

J'ai vu ce genre de ap proach dans le tutoriel de Jeff Browns Twitter.

échecs possibles que je vois:

  • l'out-commenté rendu commande modèle a quelque chose à voir avec l'Ajax (Quand je ne commente pas la seule chose qui arrive est que les postes de modèle seront rendus sur la page redirigée
  • utilisation des deux Ajax et jQuery (Mais je ne crois pas que peut être le point parce que je l'ai utilisé g: et d'autres choses groovy et nai même importé un lib jQuery)
  • cela pourrait être plus facile avec remoteFunction (Je ne sais pas vraiment comment faire fonctionner le remoteFunction dans ce cas tho)

J'espère que cette information est suffisante pour laisser quelqu'un voir ce que je suis absent

Répondre

1

Lorsque ce bouton est cliqué sur votre formulaire, les données sont envoyées à la méthode répertoriée dans le paramètre url de la balise formRemote. Ensuite, vous êtes dans cette méthode, vous arrivez à la balise de rendu commentée qui renvoie les données à la page gsp dans le div mentionné dans la balise de mise à jour de la balise formRemote.

formRemote repose sur une librairie javascript pour gérer les choses ajax comme mentionné dans la documentation Grails:

7.7.1 Ajax soutien

Par défaut Grails livré avec la bibliothèque jQuery, mais à travers le Plugin système prend en charge d'autres cadres tels que Prototype, Dojo: http: //dojotoolkit.org/, Yahoo UI: http: //developer.yahoo.com/yui/ et le Google Web Toolkit. Cette section couvre le support de Grails pour Ajax en général. Pour commencer, ajoutez cette ligne au tag votre page:

Vous pouvez remplacer jQuery par n'importe quelle autre bibliothèque fournie par un plug-in que vous avez installé.Cela fonctionne en raison de la prise en charge de Grails pour les bibliothèques de balises adaptatives. Merci à système de plugin Grails il y a un soutien pour un certain nombre de différents Ajax bibliothèques, y compris (mais sans s'y limiter):

jQuery Prototype Dojo YUI MooTools

supprimer Alors, quelle est la div d'histoire, décommentez les deux lignes de votre méthode postMessage et incluez l'une des bibliothèques javascript référencées.

+0

Je suis désolé, j'ai eu le sentiment d'avoir oublié quelque chose (écrire en plus) .. J'avais importé la lib via déjà .. Ce n'est malheureusement pas le problème. J'ai essayé de laisser la commande de rendu dans le code html, mais la commande de rendu dans mon contrôleur est exécutée dans ce nouveau (non-existant) postMessage.gsp. Donc, au lieu d'obtenir le droit update = "history", il essaie de rediriger vers un fichier gsp basé sur mon action = input. – cranq

+0

dans les outils de développement pour votre navigateur, voyez-vous le fichier prototype.js ou quelque chose de similaire se faire tirer dedans? –

+0

vous aviez raison, le prototype.js n'a pas été importé par la commande cranq

Questions connexes