我需要一个非常愚蠢的东西,但是我被卡住了。
我基本上需要渲染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文件。我想补充一些建议:
最佳答案
好的,我想我了解您要执行的操作,并且我将尝试更详细地解释我在评论中所说的内容。我不确定这是否是最佳方法,但这是我在没有其他选择的情况下会尝试的方法。
需求:
获取Controller方法的输出(例如report()
),该方法呈现GSP页面(通过render(view: "report-test")
),并将其另存为HTML文件在服务器上。
方法:
report()
及其呈现页面的逻辑。 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/