Editar: cheque http://scalate.fusesource.org/index.html: Scala Plantilla del motor: como JSP sin la porquería pero con agregado Scala frescor. Me tropecé con esto mientras revisaba el feed de #scala twitter.
Puedes echar un vistazo a http://github.com/alandipert/step. Parece un proyecto activo con solo lo suficiente para permitirle escribir el código Scala mezclado con el código xhtml. Si puede script como PHP, no sé. Una de las diferencias es que con JSP/PHP, incluye un programa dentro de una página HTML donde, como con step
, incluye algunos xml
en un archivo Scala.
Va a haber una curva de aprendizaje con Scala y sbt
, pero creo que vale la pena aprovechar Scala.
Lo otro que puede hacer es escribir una etiqueta JSP personalizada que le permita ejecutar algunos códigos Scala a través del intérprete. Hice una prueba de concepto y esto parece que funciona:
/**
* Proof of concept, you can run Scala code in a JSP tag.
* Works with jetty and sbt.
*/
class ScalaScriptTag extends BodyTagSupport {
override def doAfterBody():Int = {
try {
val settings = new Settings(str => println(str))
// interpreter classloader does not seem to pick up classes from the parent
settings.classpath.value =
"lib_managed/compile/jsp-api-2.1-6.1.14.jar;" +
"lib_managed/compile/servlet-api-2.5-6.1.14.jar"
var i = new Interpreter(settings) {
override def parentClassLoader():ClassLoader = {
return Thread.currentThread().getContextClassLoader();
}
}
i.bind("pageContext", "javax.servlet.jsp.PageContext", pageContext)
val source = Source.fromString(getBodyContent.getString)
for (line <- source.getLines) { i.interpret(line) }
} catch {
case ioe: IOException =>
throw new JspException(ioe.getMessage())
}
Tag.SKIP_BODY
}
}
Play también admite plantillas de Scalate mediante el módulo scalate: http://www.playframework.org/modules/scalate –