2010-01-29 77 views

回答

5

编辑:检查http://scalate.fusesource.org/index.htmlScala的模板引擎:如JSP没有废话,但添加了斯卡拉凉意。我在检查#scala twitter feed时偶然发现了这个问题。


你可以看看http://github.com/alandipert/step。它看起来像一个活跃的项目,足以让你编写混合了xhtml代码的Scala代码。你是否可以这样的脚本如PHP,我不知道。其中一个区别是,使用JSP/PHP,您可以在HTML页面中包含一个程序,与step一样,您可以将一些xml包含到Scala文件中。

斯卡拉和sbt会有一点学习曲线,但我认为这是值得利用斯卡拉。

您可以做的另一件事是编写一个自定义JSP标记,让您通过解释器运行一些Scala代码。我做了一个概念证明,这似乎工作:

/** 
* 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 
    } 

}      
1

http://www.playframework.org/有一个scala模式。玩是非常铁路。可能适合你的需求。

+1

Play通过scalate模块也支持Scalate模板:http://www.playframework.org/modules/scalate – 2010-03-30 17:08:34

3

Scalate是一个基于Scala的模板引擎,它允许您使用功能强大的Scala表达式,而不是有限的JSP/JSF/JSTL EL表达式语言 - 同时完全静态类型化,以便在编辑/编译时检查模板以查找错误。

Scalate中的Scaml模板可以让你编写出对XML/HTML特别好的Rails模板(Rails的粉丝喜欢Haml,而Scaml是Haml的Scala端口)。

虽然如果你喜欢JSP风格的模板,那么你最好从Scalate中的类似JSP的Ssp模板开始。