Xitrum allows you to choose template engines. This library is a template engine for Xitrum. It wraps Scalate.
See CHANGELOG to know which version of xitrum-scalate to use for which version of Xitrum.
Edit your Xitrum project's project/plugins.sbt:
// For precompiling Scalate templates in the compile phase of SBT
addSbtPlugin("org.scalatra.scalate" % "sbt-scalate-precompiler" % "1.9.6.0")
Edit build.sbt:
// Template engine for Xitrum
libraryDependencies += "tv.cntt" %% "xitrum-scalate" % "2.9.2"
// Precompile Scalate templates
import org.fusesource.scalate.ScalatePlugin._
ScalateKeys.scalateTemplateConfig in Compile := Seq(TemplateConfig(
baseDirectory.value / "src" / "main" / "scalate",
Seq(),
Seq(Binding("helper", "xitrum.Action", importMembers = true))
))
Edit xitrum.conf:
xitrum {
...
template {
"xitrum.view.Scalate" {
defaultType = jade # jade, mustache, scaml, or ssp
}
}
...
}
In xitrum.conf, you config "defaultType" (see above).
When calling Xitrum's renderView method, if you want to use template type other than the defaultType, set the last argument (options) like this:
renderView(Map("type" -> "mustache")
If you don't specify DateFormat, java.text.DateFormat.getDateInstance(DateFormat.DEFAULT, lo)
will be used, where lo
is java.util.Locale.forLanguageTag(currentAction.language)
.
renderView(Map("date" -> myDateFormat)
If you don't specify NumberFormat, java.text.NumberFormat.getInstance(lo)
will be used, where lo
is java.util.Locale.forLanguageTag(currentAction.language)
.
renderView(Map("date" -> myNumberFormat)
If you want to display an integer number as is, without any number format, instead of (Jade example):
= myObject.myInt
Use:
= myObject.myInt.toString
You can use methods [view and collection](http://scalate.github.io/scalate/documentation/user-guide.html#Views) of Scalate.
xitrum.view.Scalate provides some utility methods so that you can easily use Scalate features. See the API doc.
Ex:
import xitrum.Config
import xitrum.view.Scalate
// In your action:
val scalate = Config.xitrum.template.get.asInstanceOf[Scalate]
val template = "p This Jade template is from a string, not from a file."
val string = scalate.renderJadeString(template)
respondInlineView(string)
To avoid unnecessary log, you should add these to config/logback.xml:
<logger name="org.fusesource.scalate" level="INFO"/>
<logger name="org.fusesource.scalate.util.ClassPathBuilder" level="ERROR"/>