Freemarker is the templating language we are using for rendering views. It can do a lot of cool stuff, and you should refer to http://freemarker.org/ to learn more.
The Freemarker Configuration
object can be accessed via your application TemplateEngineFreemarker
singleton. According to the FreeMarker documentation, the configuration will be thread-safe once all settings have been set via a safe publication technique. Therefore, consider modifying it only within an extended NinjaDefault
class, during the framework start.
package conf; public class Ninja extends NinjaDefault { @Inject protected TemplateEngineFreemarker templateEngineFreemarker; @Override public void onFrameworkStart() { super.onFrameworkStart(); Configuration freemarkerConfiguration = templateEngineFreemarker.getConfiguration(); ... } }
While you can access the Freemarker Configuration
object, you can add your own custom functions using Java code:
freemarkerConfiguration.setSharedVariable("upper", new TemplateMethodModelEx() { @Override public Object exec(List args) throws TemplateModelException { return new SimpleScalar(args.get(0).toString().toUpperCase()); } });
And in your template:
${upper('Make me upper case.')}
But for templating purpose, you can also do it by defining sets of macro
functions in separate .ftl.html files.
<#macro bold> <b><#nested /></b> </#macro>
And in your template :
<#import "../layout/functions.ftl.html" as f> <@f.bold>Make me bold</@f.bold>
This last way should help you making reusable macros when using one or another HTML/CSS framework.