Observatorio de Grails 
  • Inicio
  • Actualidad
  • Artículos
  • Tutoriales
  • Eventos
  • Foro
  • Acerca de
Cuidado con el plugin Acegi al trabajar en “español” Informes con JasperReports, iReport y el plugin Jasper
abr 28

Acceso a la ejecución de un flujo de navegación desde fuera de WebFlow

publicado por Enrique Medina Montenegro

0 comentarios
930 visitas
(13 votos, media: 5,00)

Enrique Medina Montenegro

Twitter  |  LinkedIn

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.

Del.icio.us Facebook LinkedIn Twitter

Escribir un comentario

Clic para cancelar respuesta.

Actualidad  Entradas relacionadas  si te ha interesado la entrada te proponemos otras lecturas relacionadas

  • jun11

    Flujo de datos (inglés)

    publicado por Carlos Rico Avendaño en Grails

    0 comentarios
    224 visitas
    (1 votos, media: 3,00)
  • abr14

    Añadir paginación a un estado Webflow en Grails (inglés)

    publicado por Enrique Medina Montenegro en Grails

    0 comentarios
    513 visitas
    (2 votos, media: 4,00)
  • abr16

    Leer mensajes i18n desde la base de datos (inglés)

    publicado por Carlos Rico Avendaño en Grails

    0 comentarios
    689 visitas
    (3 votos, media: 4,33)

Comentarios recientes  Comentarios recientes

  • pedro luis hola como cargo imágenes de un archivo para mostrarlo en un reporte con los demás datos; en Reportes en Grails con iReport
    17/05/2012 a las 21:03

  • yo 123; en Clusterizar una aplicación Grails con EhCache (inglés)
    24/04/2012 a las 17:33

  • yo muy buebo; en Clusterizar una aplicación Grails con EhCache (inglés)
    24/04/2012 a las 17:21

Twitter  

preload preload preload

Síguenos en Twitter  |  Facebook
Inicio  |  Actualidad  |  Artículos  |  Tutoriales  |  Eventos  |  Foro  |  Acerca de

© 2010 Observatorio de Grails. Todos los derechos reservados.