plugin - ¿Cómo llamo a un servicio de Grails desde un gsp?
que es grails (4)
Creo que la mejor manera de hacerlo es:
<%
def myService = grailsApplication.mainContext.getBean("myService");
%>
De esta forma, obtienes la instancia de servicio sin perder los servicios de autoconexión.
¿Cómo puedo invocar un servicio directamente desde una vista? Estoy intentando con ${my.domain.service.method}
, pero se queja de que no puede encontrar la propiedad.
Y no, no quiero usar un controlador porque la vista es una plantilla.
Es mejor utilizar la biblioteca de etiquetas porque la creación de una instancia de servicio directamente en la vista a través del cargador de clases NO AUTONIZARÁ el autoenchufe de otros servicios declarados que puedan residir en el servicio que está tratando de usar.
Al usar la biblioteca de etiquetas, tendrá un auto-cableado de esos servicios.
En su vista de <g:customTag param1="$modelObjec" param2="someString" />
En su carpeta taglib ( yourApp/grails-app/taglib/com/something/MyAppTagLib
):
package com.something
class MyAppTagLib {
def myService // This will be auto-wired
def customTag = { attribs ->
def modelObj = attribs[''param1'']
def someString = attribs[''param2'']
// Do something with the params
myService.method()
out << "I just used method of MyService class"
}
}
Su MyService:
package com.something
class MyService {
def anotherService // This will be auto-wired
def method() {
anotherService.anotherMethod()
}
}
Prueba esto, mucha ayuda
%{--Use BlogService--}%
<g:set var="blog" bean="blogService"/>
<ul>
<g:each in="${blog.allTitles()}" var="title">
<li>${title}</li>
</g:each>
</ul>
Además, esto no es una cosa recomendada, siempre puedes usar taglib
<%@ page import="com.myproject.MyService" %>
<%
def myService = grailsApplication.classLoader.loadClass(''com.myproject.MyService'').newInstance()
%>
Y luego puedes llamar ${myService.method()}
en tu vista de gsp
Tenga en cuenta que llamar a los métodos de servicio transaccional desde vistas perjudica el rendimiento. Mejor mover todas las llamadas de método de servicio transaccional al controlador (si puede)