Question simple:
J'ai une classe de service (disons J'ai essayé le code suivant sans succès p> mais je reçois le résultat suivant: p> helpersservice code>) et une méthode
DEF constructur (paramètres) code>.
Comment puis-je appeler cette méthode à partir d'une vue de modèle.
Cannot invoke method constructURI() on null object
5 Réponses :
Les services ne sont pas destinés à être utilisés à l'intérieur des vues. Vous pouvez créer un TagLib où vous pouvez faire référence au service via une injection de dépendance. P>
Oui, TagLibs sont tellement plus propres tout autour
Voir aussi question Stackoverflow.com/questions/2510929 / ... TagLib Exemple: Stackoverflow.com/a/7005752/160799 (semble pas très propre pour moi, cependant. Je préfère la solution Stackoverflow.com/a/1652410/160799 ci-dessous - encore nouveau à grevers mais je n'ai trouvé aucun autre moyen Pour la manipulation d'affichage en fonction des droits d'accès des éléments dans une liste de résultats de recherche).
Eh bien, j'ai trouvé une solution de contournement avec le code suivant:
def helpersService = grailsApplication.classLoader.loadClass('HelpersService').newInstance()
Une méthode plus facile, en supposant que votre vue soit rendue par un contrôleur, consiste simplement à transmettre une référence au service à partir de l'action à la vue dans le modèle, c'est-à-dire:
class someController { def someService def someAction = { render(view: 'someView', model: ['someService': someService]) } }
J'ai découvert que ce code en ligne groovy fonctionne: Vous pouvez appeler des fonctions du service comme ceci: p>
J'ai utilisé cela dans une pincée dans une vue d'en-tête universelle, car chaque page en aura besoin.
Juste du code, il est assez évident que ce n'est pas un bon modèle à suivre.
Vous pouvez le faire facilement sans créer de balise liber à l'aide de la balise SET:
<g:set var="versionService" bean="versionService"/> ... <p>version ${versionService.clientVersion}</p>
Répondu ici: