2010-10-24 4 views
3

Dans un GSP (Groovy Server Page), j'utilise <g:submitToRemote update="..."> pour mettre à jour un <div> après l'appel côté serveur. Selon le code documentation et d'autres sources sur le Web, la cible <div> peut être placée arbitrairement sur la page. Dans mes tests, cependant, je trouve que le <div> doit entourer le tag <g:submitToRemote>.Grails/AJAX: mise à jour d'une région arbitraire dans la page à l'aide de g: submitToRemote

Si elle ne pas, le <div> sera mis à jour avec des contenus « aléatoires » (à savoir, parties de la forme qui entourent la balise <g:submitToRemote>).

Tenir compte du code GSP suivant:

<html> 
<head> 
    <g:javascript library="prototype" /> 
</head> 
<body> 

<div id="updateMe_NOT_WORKING">${message}</div> 

<g:form> 
    <div id="updateMe_WORKING"> 
     <g:submitToRemote value="Click Me" 
      action="someAction" update="updateMe_NOT_WORKING" /> 
    </div> 
</g:form> 

</body> 
</html> 

C'est sur Grails 1.3.4.
Qu'est-ce qui me manque? - Merci

Répondre

4

Selon mes testings, g:submitToRemote « s action attribut doit pas le point à l'action actuelle du régulateur de courant (car cela va insérer/dupliquer la vue actuelle en la vue actuelle).

Il fonctionne si vous spécifiez une action alternative dans g:submitToRemote - à savoir,

<g:submitToRemote value="Click Me" 
    action="ajaxAction" update="updateMe" /> 

Si cette action fournit un modèle - à savoir,

def ajaxAction = { [message: 'foo'] } 

alors il doit y avoir un SGP correspondant - que, dans ce cas, devrait indiquer,

$message 

Sinon, l'action peut utiliser la méthode render - comme celui-ci,

def ajaxAction = { render 'foo' } 

Je vais laisser cette question ouverte pendant un certain temps, dans le cas où il pourrait y avoir des réponses supplémentaires et, si il n'y a pas, acceptera cette réponse comme la solution.

Merci

3

Je pense que le problème est que vous ne spécifiez pas le contrôleur pour votre action. Essayez d'ajouter controller = "..." dans votre tag g: submitToRemote. Ou au moins le spécifier en g: forme.

Je suis sûr que le <div> n'a pas besoin d'être enveloppé.

+0

Merci pour la réponse [+]. - Cela m'a amené à approfondir la question. - L'attribut 'controller' ne fait pas réellement de différence, mais c'est l'attribut' action' (qui doit référencer une action qui n'est pas la * courante *, plus certaines conditions supplémentaires étant impliquées). – robbbert

+0

Oui, c'est le problème commun pour les développeurs qui ne sont pas familliar avec MVC dans Grails. J'ai eu des ennuis avec ça pendant un bon moment. –

Questions connexes