grails - 将GSP页面呈现到Web应用子文件夹中的文件

标签 grails grails-2.0 print-css

我需要一个非常愚蠢的东西,但是我被卡住了。
我基本上需要渲染gsp页面并将渲染本地保存在服务器端在web-app /下创建的文件夹内。

基本上是这样的输出:

    render(view: "report-test") 

必须保存在文件中,例如位于web-app / report /中的文件夹内的示例report-test.html。

有什么好的建议吗?

非常感谢

更新-EXPLANATION
非常感谢大家。让我解释一下我要做什么,希望有更好的解决方案。我敢打赌,我仍然是grails中的新手。
我正在尝试使用可帮助我创建pdf的print-css和Price软件打印报告。
因此,我的想法是使用gsp动态创建HTML文件,并遵循print-css规则,然后将其保存在服务器端本地,然后执行命令(使用Price)来创建我的pdf文件,并将pdf文件返回给浏览器。

更新
我需要使用CSS,但不能在html内使用,而应作为Price软件命令的一部分。 http://www.princexml.com/
因此,基本上,呈现的gps是没有应用任何CSS的html,然后当我运行命令创建pdf时,我指定要应用的css文件。
例如:
     prince -s pdf-styles.css book.html builds/book.pdf

UPDATE / 2-关闭

感谢shutgunNinja在下面的帖子中看到他的伪代码,在这里我将使用以下代码:
class YourController {
   def printHtml() {
       render(view: "report-test")
   }
   def buildReport() {
        String basePath = applicationContext.getResource("/").getFile().toString()
        def url = new URL("http://localhost:8080/PrjName/report/printHtml)
        def data = url.getText()
        def file = new File("${basePath}/reportFolder/report.html")
        file.createNewFile()
        FileUtils.writeStringToFile(file, data)
    }
}

因此,如shutgunNinja之前所写,我调用buildReport(),后者调用URL以获取html文件。我想补充一些建议:
  • 如果您使用的是诸如Spring security之类的安全框架,请务必小心,您必须能够在没有auth的情况下调用该页面,否则,您会看到登录页面
  • ,而不是您请求的文件
  • 我将basepath var添加到我存储正确地址的位置,以访问Web应用程序目录
  • 最佳答案

    好的,我想我了解您要执行的操作,并且我将尝试更详细地解释我在评论中所说的内容。我不确定这是否是最佳方法,但这是我在没有其他选择的情况下会尝试的方法。

    需求:

    获取Controller方法的输出(例如report()),该方法呈现GSP页面(通过render(view: "report-test")),并将其另存为HTML文件在服务器上。

    方法:

  • 保留report()及其呈现页面的逻辑。
  • 创建另一个Controller方法(例如buildReport()),该方法不自行呈现任何内容,而是转发回其他页面。
  • 使用此buildReport()方法可获取映射到report()的所有URL的内容,并将其保存为文件。

  • 伪代码:
    class YourController {
        def report() {
            // Handle input, generate data for populating page
            render(view: "report-test")
        }
        def buildReport() {
            // Indirectly call report(), passing whatever data is needed as URL parameters manually
            def url = new URL("/path/to/action?arg1=" + params.arg1)
            def data = url.getText()
            def file = new File("/web-app/report/report.html")
            file.createNewFile()
            FileUtils.writeStringToFile(file, data)
        }
    }
    

    请记住,我尚未测试此代码以验证其是否有效。几乎绝对需要进行修改,但是应该可以理解。

    编辑:正如他们在编辑中提到的OP一样,需要将用于登录筛选的任何安全系统设置为忽略report(),以免最终没有登录屏幕。任何重定向过滤器也是如此;无论使用哪种语言或工具包,这种方法通常都不适用于HTTP重定向或转发。

    关于grails - 将GSP页面呈现到Web应用子文件夹中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30241012/

    相关文章:

    unit-testing - 从 grails 模拟方法中抛出异常

    Grails - 按查询中的两个字段排序

    validation - Grails 命令对象自定义验证消息代码

    grails - 在grails中使用HTTP GET调用时,字段值呈现为空

    html - 强制元素在打印媒体中占据可用高度的一半

    grails - 如何阻止Grails域类在数据库中创建表

    grails - 如何在 Grails 中创建类似版本的通用字段?

    grails - 在Grails应用程序 Controller 外部使用了类[]上的方法

    html - 谷歌浏览器在不同的计算机上处​​理分页符的方式不同

    css - 如何在 Firebug 中查看打印媒体 CSS?