template grails groovy templates render gsp

grails - template - groovy render view



Renderizar archivos HTML en Grails (6)

Una opción obvia es simplemente cambiar el nombre de tus archivos HTML de _foo.gsp a _foo.gsp y luego usar <render template="foo"> . Sin embargo, esto es tan obvio que estoy seguro de que ya lo has pensado.

Si simplemente desea procesar un archivo HTML desde un controlador, puede usar el parámetro de text del método de control de render

def htmlContent = new File(''/bar/foo.html'').text render text: htmlContent, contentType:"text/html", encoding:"UTF-8"

Si desea hacer lo mismo desde un .gsp, podría escribir una etiqueta. Algo como lo siguiente (no probado) debería funcionar:

import org.springframework.web.context.request.RequestContextHolder class HtmlTagLib { static namespace = ''html'' def render = {attrs -> def filePath = attrs.file if (!file) { throwTagError("''file'' attribute must be provided") } def htmlContent = new File(filePath).text out << htmlContent } }

Puede llamar a esta etiqueta desde un GSP usando

<html:render file="/bar/foo.html"/>

Miré a mi alrededor, pero no encontré la manera de simplemente incluir o representar archivos * .html en Grails. Mi aplicación necesita g.render o <g:render> plantillas que se entregan como archivos html. Para esto, como sabemos, los archivos html deben convertirse a archivos _foo.gsp para poder renderizarse. Estoy totalmente sorprendido de por qué no hay un soporte directo para html o hay alguno?

¡Gracias!


Poco arreglado el ejemplo del Don, funciona bien para mí

import org.apache.commons.io.IOUtils

class HtmlTagLib { static namespace = ''html'' def render = {attrs -> def filePath = attrs.file if (!filePath) { throwTagError("''file'' attribute must be provided") } IOUtils.copy(request.servletContext.getResourceAsStream(filePath), out); } }


Closure include = { attr -> out << Holders.getServletContext().getResource(attr.file).getContent(); }

Es relativo a la carpeta de la aplicación web de la aplicación principal de Grails


Quería escribir páginas estáticas html / ajax alojadas en la aplicación Grails (v2.4.4), pero utilizo el controlador para la reescritura de la url. Pude lograr esto moviendo el archivo a la aplicación web / (para facilitar la referencia), y simplemente uso el método render () con los parámetros ''file'' y ''contentType'', tales como:

// My controller action def tmp() { render file: ''web-app/tmp.html'', contentType: ''text/html'' }

Nota: Solo probé esto usando run-app, y aún no he empaquetado una guerra y no he implementado en tomcat.

Doc: http://grails.github.io/grails-doc/2.4.4/ref/Controllers/render.html


Pude utilizar el enfoque de @ momo para permitir la inclusión de archivos externos para el plugin de renderizado de Grails, donde las rutas de red se estropearían en entornos más altos; el mío terminó como sigue:

def includeFile = { attr -> URL resource = Holders.getServletContext().getResource(attr.file) InputStream content = resource.getContent() String text = content?.text log.info "includeFile($attr) - resource: $resource, content.text.size(): ${text?.size()}" out << text }


¿Qué es lo que estás tratando de lograr?

  1. Render html desde un controlador? En ese caso, todo lo que debe hacer es redirigir al usuario a un archivo de su control.

    redirect(uri:"/html/my.html")

  2. ¿Usar archivos html en lugar de archivos de plantilla gsp? La cosa es que Grails es una plataforma de "Convención sobre la configuración" y eso significa que tendrás que hacer algunas cosas "al estilo de Grails". Los archivos necesitan _ y .gsp pero el nombre puede ser el que prefiera, incluso si es más fácil cuando usa el mismo nombre que el controlador. Lo que obtienes al hacer eso es el conocimiento de que cada desarrollador que conoce a Grails y entra en tu proyecto entenderá cómo se vinculan las cosas y eso les ayudará a comenzar rápidamente.