OK. Я прочитал источники и разработал исправление. Кажется, что шаблонизатор scala play допускает определенный набор различных типов в шаблоне для внутреннего рендеринга (исключая play-scala / src / play / templates / ScalaTemplate.scala), не включая scala.xml.Node:
case class BaseScalaTemplate[T<:Appendable[T],F<:Format[T]](format: F) {
def _display_(o:Any):T = {
o match {
case escaped:T => escaped
case () => format.raw("")
case None => format.raw("")
case Some(v) => _display_(v)
case escapeds:Seq[Any] => escapeds.foldLeft(format.raw(""))(_ + _display_(_))
case string:String => format.escape(string)
case v if v != null => _display_(v.toString)
case _ => format.raw("")
}
}
}
В основном, в строку вводятся строки, но есть несколько других типов. Глядя на верхнюю строку выражения match выше, все, что является подтипом Appendable, разрешено. И так уж получилось, что чуть дальше определен следующий класс:
case class Html(text:String) extends Appendable[Html] {
val buffer = new StringBuilder(text)
def +(other:Html) = {
buffer.append(other.buffer)
this
}
override def toString = buffer.toString
}
Тогда мое решение - преобразовать исходное поддерево xml в строку, а затем обернуть его в класс Html следующим образом:
@(session:play.mvc.Scope.Session, flash:play.mvc.Scope.Flash, analysisTable : scala.xml.Node )
@main(title="Home", session=session, flash=flash) {
<h1>Some title</h1>
@{new play.templates.Html(analysisTable.toString)}
}