6
votes

Comment appeler un service Grails dans une vue?

Question simple: J'ai une classe de service (disons 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.

J'ai essayé le code suivant sans succès p> xxx pré>

mais je reçois le résultat suivant: p>

Cannot invoke method constructURI() on null object 


5 Réponses :


20
votes

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.


2 commentaires

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).



1
votes

Eh bien, j'ai trouvé une solution de contournement avec le code suivant:

def helpersService = grailsApplication.classLoader.loadClass('HelpersService').newInstance()


0 commentaires

7
votes

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])
  }
}


0 commentaires

2
votes

J'ai découvert que ce code en ligne groovy fonctionne: xxx

Vous pouvez appeler des fonctions du service comme ceci: xxx


2 commentaires

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.



1
votes

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>


0 commentaires