-
jun11
-
abr14
Añadir paginación a un estado Webflow en Grails (inglés)
publicado por Enrique Medina Montenegro en Grails
513 visitas -
abr16
Leer mensajes i18n desde la base de datos (inglés)
publicado por Carlos Rico Avendaño en Grails
689 visitas
Acceso a la ejecución de un flujo de navegación desde fuera de WebFlow
publicado por Enrique Medina Montenegro
Enrique Medina Montenegro
Con más de 14 años de experiencia en el mundo de las TI, donde comenzó desarrollando aplicaciones de escritorio en Delphi o Visual Basic, este Ingeniero en Informática por la Universidad de Alicante (1991-1996) ha ido perfilando su actividad profesional hacia las arquitecturas J2EE, donde siempre ha seguido muy atento, e incluso colaborado en ocasiones, con proyectos open-source como MyFaces, Spring, Hibernate, Groovy o Grails. Ocupando puestos desde Programador Junior hasta Arquitecto Senior de Soluciones, Enrique ha sido testigo de cómo ha ido evolucionando la tecnología en torno al desarrollo de aplicaciones web, adquiriendo un conocimiento y experiencia que le permiten evaluar con detalle las necesidades de cada proyecto y aplicar las herramientas que maximizan su productividad. Actualmente, Enrique se ha especializado en el framework de desarrollo Grails, y ejerce la Dirección Técnica de proyectos basados, entre otras, en esta tecnología.
Cuando utilizamos el plugin de WebFlow para gestionar diálogos o conversaciones en nuestra aplicación Grails, tenemos a nuestra disposición un par de ámbitos (scopes) denominados ‘flow‘ y ‘conversation‘, que nos permiten salvaguardar el estado de dicho flujo de navegación entre varias pantallas, mediante la posibilidad de almacenar objetos ‘serializables‘. Estos ámbitos puede ser accedidos fácilmente desde el flujo de nuestro diálogo/conversación porque están disponibles durante la ejecución del mismo, como parte de los estados/acciones definidos en nuestro controlador Grails, a través del uso de las variables ‘flow‘ y ‘conversation‘.
Sin embargo, en ocasiones, necesitamos acceder a variables almacenadas en el ámbito de un diálogo/conversación, pero desde fuera del mismo; por ejemplo, si realizamos una llamada Ajax o una llamada GET para obtener una imagen que queremos pintar en pantalla. En tales casos, se invoca una acción definida en el mismo controlador Grails donde está definido el flujo de navegación (con todos sus estados, acciones, etc.) de nuestro diálogo/conversación, pero que no pertenece al propio flujo, por lo que el contexto de dicho flujo de navegación no estará disponible mediante un acceso directo por las variables ‘flow‘ o ‘conversation‘, como se ha comentado en el párrafo anterior.
Pues bien, ¿realmente debería ser posible acceder al estado de un flujo de navegación desde fuera del propio flujo, pero siempre perteneciendo la llamada al propio diálogo/conversación? En nuestra humilde opinión, esto debería ser posible, principalmente para dar soporte a llamadas AJAX, por ejemplo. Entonces, ¿cómo podemos acceder a dicho estado? Aquí os explicamos cómo, utilizando un ejemplo de llamada para pintar la foto de un asistente a un evento:
def linkImagen = {
FlowExecutionRepository repository =ApplicationHolder.getApplication().getMainContext().getBean("flowExecutionRepository")
ExternalContext externalContext = new ServletExternalContext(request.getSession().getServletContext(), request, response)
try {
ExternalContextHolder.setExternalContext(externalContext)
FlowExecutionKey flowExecutionKey = repository.parseFlowExecutionKey(params.execution)
FlowExecution flowExecution = repository.getFlowExecution(flowExecutionKey)
def asistenciaInstance = flowExecution.getActiveSession().getScope()['asistenciaInstance']
response.setContentType(asistenciaInstance.ficha.tipoImagen)
response.setContentLength(asistenciaInstance.ficha.imagen?.size())
response.outputStream << asistenciaInstance.ficha.imagen
}
finally {
ExternalContextHolder.setExternalContext(null);
}
}
Luego en nuestro GSP simplemente tendremos que definir una imagen HTML donde su atributo 'src' invoque a la acción 'linkImagen' de nuestro controlador. Por ejemplo:
Este mismo ejemplo que hemos usado en este artículo para explicar cómo acceder al ámbito del flujo de navegación de nuestro diálogo/conversación cuando utilizamos el plugin WebFlow de Grails está siendo utilizado en uno de nuestros desarrollos y funciona a la perfección, por lo estamos seguros de que os será de gran ayuda si os encontráis con esta necesidad.
Y como siempre al final de nuestros artículos, por favor no os olvidéis de puntuarnos y dejarnos vuestros comentarios. Muchas gracias.


Entradas relacionadas 
(3 votos, media: 4,33)
Comentarios recientes