Soy muy nuevo en Grails, por lo que probablemente haya una respuesta muy simple a esta pregunta. Intento mostrar una imagen creada dinámicamente en un gsp. La imagen NO se almacena en una base de datos, se crea sobre la marcha en el controlador.Grails: visualización de la imagen creada en gsp
Lo que esencialmente tengo es un gsp que tiene un formulario que toma un conjunto de entradas de usuario (requestGraph.gsp). Al enviar el formulario, los parámetros se envían a la acción displayGraph en el controlador que consulta información de una base de datos completamente fuera de Grails y crea un gráfico utilizando la biblioteca JFreeChart. Me gustaría mostrar esta imagen dentro de displayGraph.gsp o algo así.
Así que, básicamente dentro requestGraph.gsp tengo un fragmento similar a:
<g:form action="displayGraph">
<!-- ... bunch of labels and boxes -->
<g:submitButton name="displayGraph" value="Display Graph" />
</g:form>
dentro del controlador Tengo algo como:
def requestGraph = {}
def displayGraph = {
//... code that uses params to make an image byte array and assigns to var img
return [image : img]
}
Dentro displayGraph.gsp:
<body>
<h1>Graph Title</h1>
<!-- ??? How to dislpay image? -->
</body>
Intenté canalizar la imagen directamente a la secuencia de salida en la acción DisplayGraph. Esto funciona, pero luego pierdo el control de todos los formatos de página en displayGraph.gsp.
La mayoría de los tutoriales que he encontrado crean una acción dedicada para canalizar la imagen a una salida de vapor y luego llaman esa acción usando una etiqueta. El problema es que mi imagen no está almacenada en una base de datos y no veo forma de pasar la matriz de bytes de la imagen (o incluso los parámetros del formulario) para crear/renderizar la imagen. ¿Puede alguien ayudarme con esto? Gracias.
Lo he intentado. Me parece que cuando escribo la imagen directamente en la secuencia de salida, se muestra inmediatamente en el navegador como una imagen en lugar de una página web. Esto, por supuesto, significa que no puedo agregar ningún tipo de formato o lógica a la página. – Klam
Eso es lo que sucede si vas directamente a 'myController/displayGraph' en tu navegador; pero si usa eso como 'src' de una imagen, aún tiene control de página. Sin embargo, acabo de actualizar mi respuesta con una estipulación que aún puede impedirte. –
Esta es la forma correcta de hacerlo. Pero te aconsejo que guardes las imágenes y otros archivos en el sistema de archivos y que almacenes en db only path and type. PD Si quiere código para cambiar el tamaño de la imagen (esto fue útil en mi proyecto), pregúnteme. – Stan