Graal de rendu des différentes contrôleur
Ma question est similaire à ce post suivant
Rendre un avis d'un autre contrôleur
J'ai un TestConfigController ma question est que puis-je faire en cas de validation échoue et que je veux rendre contrôleur:test et afficher:edit, plutôt que de contrôleur:testCOnfig et afficher:edit
def save() {
def testConfigInstance = new TestConfig(params)
if (!testConfigInstance.save(flush: true)) {
/*Plutôt que de vue:"modifier", je veux afficher:"/test/modifier" qui ne fonctionne pas */
render(view:"edit", model: [testConfigInstance: testConfigInstance],id:params.test.id)
return
}
println "+++++++++++++++++++++++++"
flash.message = message(code: 'Data successfully saved', args: [message(code: 'testConfig.label', default: 'Successfully saved')])
redirect(action: "edit", controller:"test", id:params.test.id)
}
Les pointeurs? J'ai déjà regardé dans graal de redirection qui n'a pas de "modèle" param et ne peut donc pas passer les erreurs de validation de la vue
J'ai également regardé dans graal rendu qui n'ont pas de contrôleur de param afin que je puisse revenir à différents contrôleur!
S'il vous plaît laissez-moi savoir si plus de détail/code est nécessaire
MODIFIER
La suite se passe tout en utilisant l'une des deux choses
render(view:"/test/edit", model: [testConfigInstance: testConfigInstance],id:params['test.id'])
Le code ci-dessus affiche la page /test/modifier sans référence à testid finalement erroring arrière en disant "test.id" ne peut pas être null.. (ce qui signifie son rendu /test/modifier et de ne pas /test/modifier/1)
render(view:"/test/edit/"+params['test.id'], model: [testConfigInstance: testConfigInstance],id:params['test.id'])
Le code ci-dessus conduit à d'erreur suivant
The requested resource (/EasyTha/WEB-INF/grails-app/views/test/edit/1.jsp) is not available.
Soit un de la le code ci-dessus rend juste "/test/modifier le" no id à la fin, donc, à terme, erroring arrière en disant test.id ne peut pas être null.
Pourriez-vous fournir plus d'informations sur "ne fonctionne pas"? Ne vous obtenez des messages d'erreur? Il devrait fonctionner.
Graal 2.0. Il travaille maintenant mais maintenant, en pensant à ça, j'ai le sentiment qu'il pourrait ne pas fonctionner en raison du contexte de développement? Peut-être que je devrais essayer /contexte/test/modifier
Vous n'avez pas besoin d'ajouter le contexte sur le nom de la vue. Graal doit gérer cela.
désolé pour la longue absence, veuillez voir mon edit
OriginalL'auteur Sap | 2012-02-07
Vous devez vous connecter pour publier un commentaire.
La valeur de l'id que vous essayez d'ajouter dans le chemin de la vue devrait être une partie de la carte. Les valeurs que vous entrez dans le modèle de la carte sont disponibles dans la vue qui est rendu.
Dans la première option que vous avez essayé, le paramètre id ne fait aucune différence que la méthode render ne pas utiliser toute la 'id' paramètre (la méthode de redirection utilise l'id de paramètre pour générer l'url de redirection).
Votre extrait de code doit être quelque chose comme ceci:
La méthode render-vous que vous utilisez ici n'est pas de vous rediriger vers une autre action. rendre juste imprime le analysée viewName pour le flux de sortie. Par exemple. render(voir:"/test/modifier") rend le modifier.gsp vue. Il n'est pas réellement vous redirigeant vers le modifier l'action de contrôleur de test. Par conséquent, simplement en passant l'id dans le modèle de la carte ne vous donnera pas accès à la testInstance sur la vue. Vous devrez obtenir le testInstance Par id et passer à l'affichage dans le modèle de la carte
L'id doit être disponible comme un paramètre de modèle dans le /test/modifier la vue. Vous pouvez poster votre spg ici?
un trop grand SPG pour la coller ici. si cela ne vous dérange pas vous pouvez le télécharger? cynosuredev.com/edit.rar
veuillez voir mon edit. Je pense que vous êtes de se confondre entre les rediriger et de rendu. Ce poste peut vous aider grails.1312388.n4.nabble.com/...
Merci beaucoup, cela fonctionne. Je comprends que le rendu est équivalent à l'avant en java, tandis que la redirection est de rediriger:) en tout cas, merci beaucoup pour votre aide, il ne me vint que je peux envoyer des deux objets dans un modèle.
OriginalL'auteur Anuj Arora
Anuj Arora est droit:
Si vous voulez juste pour rendre l'arbitraire d'un point de vue, vous pouvez utiliser le chemin d'accès complet de la vue liés à l'graal-app/view dossier:
Dans votre cas:
devrait fonctionner.
OriginalL'auteur Peter
Si vous souhaitez seulement à rendre la vue
/test/edit
, l'appelrender(view:'/test/edit',...)
devrait être tout ce dont vous avez besoin.Si au lieu de cela, vous voulez également inclure une partie du traitement de la
TestController
etedit
action, puis regardez lade la chaîne d'()
appel. Il a unmodel
paramètre où vous pouvez passer les erreurs de validation etcontroller/action
paramètres de redirection vers l'autre contrôleur.chain()
appel est qu'une redirection est envoyé au client. Cela ajoute de la surcharge de l'application. Dans ce cas, je préfère la include() appeler.Vrai, vous pourrait rendre le résultat d'une
g.include()
appel et enregistrer la redirection de frais généraux. N'avais jamais envisagé cette option.Hey chaîne a parfaitement fonctionné, vous vous demandez encore comment inclure le travail dans un tel scénario, où le test a de nombreux testconfig et je suis en train de montrer tous les testconfigs dans test/modifier/..
Puisque c'est une Bibliothèque de balises, il est destiné à être utilisé dans un SPG (pour les modèles de rendu au lieu de
<g:render/>
), mais vous pouvez l'appeler dans un Contrôleur, de sorte que vous pourriez essayer de faire quelque chose commerender(g.include(controller:'test',action:'edit',model:...))
.OriginalL'auteur schmolly159