Skip to content

StringTemplate

alvn edited this page Jan 30, 2015 · 2 revisions

Configuring the default template engine is done by creating a app.config.TemplateConfig and let it extend AbstractStringTemplateConfig:

package app.config;
public class TemplateConfig extends AbstractStringTemplateConfig {
    @Override
    public void init(StringTemplateConfiguration config) {
        config.registerRenderer(Date.class, new DateRenderer());
    }
}

StringTemplate has various configuration and customisation options. Most of these are implementations of Model Adaptors and Renderers, which are exposed through the public void init(StringTemplateConfiguration config), when extending AbstractStringTemplateConfig.

Custom renderers

StringTemplate will most often just call the toString() on a type it does not know of, and if something special needs to be done for a given class type, you can write your own renderer, like the DateRenderer in the example, which lets you set a format for a given keyword of the type Date:

<div class="modal-body">
	<h5>$it.date; format="dd. MMMM YYYY"$</h5>
	<h3 class="news-headline">$it.headline$</h3>
</div>

Custom adaptors

public class StringAdaptor implements ModelAdaptor {
    @Override
    public Object getProperty(
					Interpreter interp, 
					ST self, 
					Object o, 
					Object property, 
					String propertyName) 
						throws STNoSuchPropertyException {
    					
        switch (propertyName) {
	        case "asform":
            return String.format(
            	"<form><input type=\"hidden\" value=\"%s\"></form>", 
            	o.toString());
        }
        throw new STNoSuchPropertyException(null, property, propertyName);
    }

}

These extend your model by adding virtual properties to be used in the template:

<div class="modal-body">
	$it.headline.asform$
</div>

Adaptors are registered like the renderers in StringTemplateConfiguration.

Other configuration options

Per default StringTemplate, in jawn, is configured to use dollar signs as keyword delimiters. This, however, can also be altered.

public void init(StringTemplateConfiguration config) {
    config.setDelimiterStart('<');
    config.setDelimiterEnd('>');
}

At this point, only char can be used, but this will change in the futrue.

Clone this wiki locally