Supposons que j'ai un extrait gsp stocké dans ma base de données. Comment puis-je le fusionner par programmation avec un modèle de données pour produire une chaîne.GSP rendu programme
Répondre
Le applicationContext d'une application Grails contient un haricot nommé
groovyPagesTemplateEngine
Par défaut est une instance de GroovyPagesTemplateEngine. Donc, vous pouvez utiliser le code comme celui-ci dans votre contrôleur ou service:
class MyService/MyController {
def groovyPagesTemplateEngine
String renderGSPToString(String uri, Map model) {
groovyPagesTemplateEngine.createTemplate(uri).make(model).toString()
}
}
NB: cet extrait est pas vraiment pris à partir du code en cours d'exécution, il devrait simplement clarifier l'idée.
J'ai trouvé un DIRTY (mais travailler) façon de rendre complexes hors ligne en utilisant GSP groovyPageRenderer avec scriptsource substitué. Dans ce cas, vous avez accès à toutes les syntaxes gsp y compris g:if
etc ..
d'abord définir deux classes fictives:
class StringPageLocator extends GrailsConventionGroovyPageLocator {
GroovyPageScriptSource findViewByPath(String content) {
return new StringScriptSource(content)
}
}
class StringScriptSource implements GroovyPageScriptSource{
String content
public StringScriptSource(String content) {
this.content=content
}
@Override String suggestedClassName() { "DummyName" }
@Override boolean isPublic() { true }
@Override String getScriptAsString() { return content }
@Override boolean isModified() { true }
@Override String getURI() { "DummyURI" }
}
Et vous pouvez alors l'utiliser comme tel:
def groovyPageLocator // Injected automaticaly to service/controller etc...
groovyPageRenderer.groovyPageLocator=new StringPageLocator()
String output=groovyPageRenderer.render(
view:'Hello2 ${user} <g:if test="${test}">TRUE!!!</g:if>',
model:[user:'test user2',test:true]
)
vous pouvez faire une méthode du contrôleur qui fait ce que vous voulez. Ensuite, vous aurez une API HTTP pour accomplir ce que vous voulez. Le modèle de la méthode du contrôleur aura une étiquette <g:render>
, correctement paramétrée.
- 1. rendu un GSP d'un emploi à quartz dans Grails
- 2. rendu un ActionLink programme
- 3. Graves Onglet GSP Format fieldValue
- 4. comment déboguer une page gsp? (Pas Grails, juste gsp)
- 5. Composants panés dans GSP
- 6. GSP taglib importation
- 7. Rendu d'un nœud Umbraco par programme
- 8. Gorm findAllBy intérieur doute gsp
- 9. Édition GSP dans NetBeans 6.8
- 10. lien directement vers le GSP
- 11. Page de serveur personnalisé Grails (custom gsp)
- 12. Grails/GSP: sortir de <g:each>
- 13. Comment puis-je le nid $ {} dans gsp
- 14. un problème variable à l'intérieur gsp
- 15. Afficher des images dans gsp (grails)
- 16. Comment imbriquez g: chaque variable dans gsp?
- 17. Erreurs de rendu à partir d'un service
- 18. opengl hors écran rendu
- 19. Grails Balise GSP pour soumettre un formulaire avec un lien?
- 20. Grails GSP <g:set> tag défini comme entier?
- 21. Transmettre des données de GSP à un contrôleur dans Grails
- 22. Grails lien taglib utilisation en dehors de GSP
- 23. Comment implémenter openID en utilisant openid4java dans GSP
- 24. "Ajax non trouvé" lors de l'ajout de submitToRemote dans gsp
- 25. Passer correctement une liste Groovy au code Javascript dans GSP
- 26. Comment enregistrer une valeur de champ composite dans Grails GSP?
- 27. GSP g: sélection de l'option sélection par défaut
- 28. Grails, recherche de vues disponibles (.gsp) lors de l'exécution
- 29. Grails GSP ne génère pas de code HTML sous Geronimo
- 30. Utilisation des vues GSP dans Spring MVC sans Grails
En fait, je veux le « createTemplate » qui prend le texte GSP lui-même comme entrée, au lieu de l'uri d'un fichier. Mais c'est le chemin. Merci. – tuler
si est dans une chaîne de code du modèle, pensez à utiliser la SimpleTemplateEngine http://groovy.codehaus.org/api/groovy/text/SimpleTemplateEngine.html –