Integrating Scalate into Play 2.0

北城以北 提交于 2019-12-08 07:14:44

问题


A feature of the Play 2.0 framework I appreciate is statically compiled views. If a controller renders a view without supplying the correct number of well-typed arguments, a compile error is thrown. This greatly increases maintainability as controller<>view discrepancies don't have to be tested by running the application but appear at compile time instead.

However, the standard Play 2.0 view templates use plain HTML combined with Scala as a language. I want to use Scalate so I can combine Scala with the much less verbose Scaml or Jade templating languages. But I don't want to use Scalate to compile my views on runtime, because I'll lose the advantage of statically compiled views I've mentioned above.

Therefore, I've tried implementing static compilation of my Jade views using the xsbt-scalate-generator as described elsewhere. This only gets me halfway though - the plugin when configured correctly manages to produce corresponding .class files, but it names and packages them differently than normal Play 2.0 views. A default Play 2.0 view named index.scala.html gets compiled to a file index.class in the package views.html. However, a Jade view named index.jade creates a file $_scalate_$default_jade.class in the default (blank) package. This class is not importable and not usable in a Java Play 2.0 controller.

How can I generate the class files of my Scalate views in such a way that I could just write return ok(views.html.index.render(args)); in my controllers?

(It does appear the generated classes provide a method named render() at least)


回答1:


I started out a plugin to do just that. Checkout my work on: https://github.com/kryptt/play2-scalate-plugin



来源:https://stackoverflow.com/questions/12239245/integrating-scalate-into-play-2-0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!