Add an expression dialect to thymeleaf to access groovy's collate
Easy way to add collate for separting lists into rows with a certain size
class Groovy { List<List> collate(List list, Integer columns) { return list.collate(columns) } } class GroovyDialect extends AbstractDialect implements IExpressionEnhancingDialect { @Override Map<String, Object> getAdditionalExpressionObjects(IProcessingContext processingContext) { return [ groovy: new Groovy() ] } @Override String getPrefix() { return "groovy" } }
Add dialects to TemplateEngine (code based approach), see additionalDialects in XML:
def templateEngine = new TemplateEngine().with{ // ... setAdditionalDialects([new GroovyDialect()] as Set<IDialect>) return it }
Use in template:
<div th:each="row : ${#groovy.collate(entries, 4)}" class="row-fluid"> <ul class="thumbnails"> <li th:each="entry : ${row}" class="span3"> <div class="thumbnail">...</div> </li> </ul> </div>