提升 - 在字符串变量中获取模板的渲染输出

时间:2013-07-06 11:57:19

标签: scala lift

我们有一个用Scala / Liftweb编写的Web应用程序运行良好。现在我们需要将一些视图/报告呈现为PDF文件。我们已经使用了将采用格式良好的XHTML并将其输出为PDF的库,因此我试图将渲染的Lift模板的输出作为字符串输出到PDF库中。

如何将模板的输出作为变量?我见过this discussion David Pollak谈到使用返回NodeSeq的S.render,但我们在这方面没有取得多大进展。

理想情况下,我会做类似的事情:

val seq = S.render(NodeSeq, ???)
val stringOutput = seq.toString()    

1 个答案:

答案 0 :(得分:2)

如果您执行此类操作,则应呈现页面:

val htmlString:Box[String] = for{
  r <- S.request
  t <- Templates("index" :: Nil)
} yield S.render(t, r.request))

index应该替换为您要渲染的模板的路径。这应该适用于基本实例,但如果您使用Menu.params或其他URL类型变量,则需要一些额外的工作。

<强>更新

如果需要访问HTTP请求线程之外的会话对象,则需要初始化会话。为此,您可以像这样修改上述内容:

val html = for{
  r <- S.request
  sn <- S.session 
  t <- Templates("index" :: Nil)
} yield S.initIfUninitted(sn) { 
  S.render(t, r.request)) 
}