Java extensions
Java extensions add convenience methods to objects for use in view templates, making expressions more expressive.
The code examples show an example template expression, with its result on the next line.
Collection extensions
join(separator)
Concatenates the collection’s entries, with the given separator between each entry. Returns: String
.
${['red', 'green', 'blue'].join('/')}
red/green/blue
pluralize()
Returns an ‘s’ when the collection’s size is not 1. Returns: String
.
colour${['red', 'green', 'blue'].pluralize()}
colours
pluralize(plural)
Returns the given plural when the collection’s size is not 1. Returns: String
.
box${['red', 'green', 'blue'].pluralize('es')}
boxes
pluralize(singular, plural)
Returns the given plural form when the collection’s size is not 1; returns the given singular form when it is 1. Returns: String
.
journ${['red'].pluralize('al', 'aux')}
journal
journ${['red', 'green', 'blue'].pluralize('al', 'aux')}
journaux
Date extensions
format(format)
Formats the date using the given date format pattern. Returns: String
.
${new Date(1275910970000).format('dd MMMM yyyy hh:mm:ss')}
07 June 2010 01:42:50
format(format, language)
Formats the date using the given date format pattern, in the given language. Returns: String
.
${new Date(1275910970000).format('dd MMMM yyyy hh:mm:ss', 'fr')}
07 juin 2010 01:42:50
since()
Formats the date as a relative time, compared to now, e.g. 3 minutes ago. Returns: String
.
${new Date(new Date().getTime() - 1000000).since()}
16 minutes ago
You can customise the output using the following messages: since.seconds
, since.minutes
, since.hours
, since.days
, since.months
and since.years
.
since(condition)
Formats the date as a relative time, compared to now. If the condition is true, dates more than one month ago are formatted as a date. Returns: String
.
You can customise the output using the same messages as for since()
, as well as since.format
for dates more than one month ago.
${new Date(1262350000000).since(false)}
5 months ago
${new Date(1262350000000).since(true)}
Jan 1, 2010
Long extensions
asdate(format)
Formats a time stamp as a date. Returns: String
- a formatted date.
${1275910970000.asdate('dd MMMM yyyy hh:mm:ss')}
07 June 2010 01:42:50
asdate(format, language)
Formats a time stamp as a date, in the given language. Returns: String
- a formatted date.
${1275910970000.asdate('dd MMMM yyyy hh:mm:ss', 'fr')}
07 juin 2010 01:42:50
formatSize()
Formats a number of bytes as a file size, with units.
${726016L.formatSize()}
709KB
Map extensions
asAttr()
Formats the map’s keys and values as HTML attributes. Returns: play.templates.Template.ExecutableTemplate.RawData
.
${[id:'42', color:'red'].asAttr()}
id="42" color="red"
asAttr(condition)
Formats the map’s keys and values as HTML attributes, if the condition is true. Returns: play.templates.Template.ExecutableTemplate.RawData
.
${[id:'42', color:'red'].asAttr(true)}
id="42" color="red"
Number extensions
divisibleBy(divisor)
Returns true if the number is divisible by the given number – the divisor. Returns: boolean
.
${42.divisibleBy(7)}
true
format(format)
Formats the number using the given number format pattern. Returns: String
.
${42.format('000.00')}
042.00
formatCurrency(currencyCode)
Formats the number as a currency for the given currency code, e.g. EUR. Returns: String
.
${42.formatCurrency('EUR').raw()}
€ 42.00
page(pageSize)
Returns the page number, for the given page size, from interpreting the number as an index. Returns: Integer
.
${42.page(10)}
5
pluralize()
Returns an ‘s’ when the number is not 1. Returns: String
.
colour${['red', 'green', 'blue'].pluralize()} - colour${3.pluralize()}
colours - colours
pluralize(plural)
Returns the given plural when the number is not 1. Returns: String
.
box${3.pluralize('es')}
boxes
pluralize(singular, plural)
Returns the given plural form when the number is not 1; returns the given singular form when it is 1. Returns: String
.
journ${1.pluralize('al', 'aux')}
journal
journ${3.pluralize('al', 'aux')}
journaux
Object extensions
addSlashes()
Backslash-escapes Java-escaped single and double quotes in the object’s String
representation. Returns: String
.
${"single quote (')".addSlashes().raw()} ${'double quote (")'.addSlashes().raw()}
single quote (\') double quote (\")
capAll()
Capitalises every word in the object’s String
representation. Returns: String
.
${"lorum ipsum dolor".capAll()}
Lorum Ipsum Dolor
capFirst()
Capitalises the first word in the object’s String
representation. Returns: String
.
${"lorum ipsum dolor".capFirst()}
Lorum ipsum dolor
cut(substring)
Removes occurrences of the given sub-string. Returns: String
.
${"lorum ipsum dolor".cut('um')}
lor ips dolor
escape()
Escapes reserved HTML characters in the object’s String
representation. Returns: String
.
${"The <blink>tag</blink> is evil".escape().raw()}
The <blink>tag</blink> is evil
nl2br()
Replaces new-line characters with HTML br
tags. Returns: String
.
${"one\ntwo".nl2br()}
one<br/>two
Note that the output is not HTML-escaped, so that the br
tag is not escaped in the output. This means that you probably want to use escape() for user input:
${userInput.escape().nl2br()}
raw()
Returns the object without template escaping. Returns: play.templates.Template.ExecutableTemplate.RawData
.
${'<'}
<
${'<'.raw()}
<
raw(condition)
Returns the object without template escaping, if the condition is true. Returns: play.templates.Template.ExecutableTemplate.RawData
.
${'<'.raw(true)}
<
yesNo(‘yes’, ‘no’)
Returns the first parameter (‘yes’) if the object evaluates to true, or the second parameter (‘no’) otherwise. Returns: String
.
${"".yesno('yes', 'no')}
no
${"not empty".yesno('yes', 'no')}
yes
String extensions
asXml()
Parses the given XML string. Returns: groovy.util.slurpersupport.GPathResult
.
camelCase()
Formats the string in camel case, as if for a Java class name. Returns: String
.
${"lorum ipsum dolor".camelCase()}
LorumIpsumDolor
capitalizeWords()
Capitalises every word in the string. Returns: String
.
${"lorum ipsum dolor".capitalizeWords()}
Lorum Ipsum Dolor
escapeHtml()
Escapes reserved HTML characters. Returns: String
.
${"The <blink>tag</blink> is evil".escape().raw()}
The <blink>tag</blink> is evil
escapeJavaScript()
Escapes reserved JavaScript characters. Returns: String
.
${"single quote (') double quote (\")".escapeJavaScript().raw()}
single quote (\') double quote (\")
escapeXml()
Escapes reserved XML characters. Returns: String
.
${"<>\"&".escape().raw()}
<>"&
last()
Returns the last item in the list. Returns: Object
.
${['red', 'green', 'blue'].last()}
blue
noAccents()
Removes accents from the letters in the string. Returns: String
.
${"Stéphane Épardaud".noAccents()}
Stephane Epardaud
pad(length)
Pads the string with
up to the given length. Returns: String
.
${"x".pad(4).raw()}
x
slugify()
Formats the string as a ‘slug’ for use in URLs, that avoids reserved URL path characters. Returns: String
.
${"The Play! framework’s manual".slugify()}
the-play-framework-s-manual
urlEncode()
Escapes reserved URL query string characters. Returns: String
.
${"!@#\$%^&()".urlEncode()}
%21%40%23%24%25%5E%26%28%29
String array extensions
add(value)
Adds value to the end of the array. Returns: String[]
.
${(["red", "green", "blue"] as String[]).add('pink').join(' ')}
red green blue pink
contains(string)
Returns true if the array contains the given string. Returns: boolean
.
${(['red', 'green', 'blue'] as String[]).contains('green')}
true
remove(string)
Returns the array, with the given string removed. Returns: String[]
.
${(['red', 'green', 'blue'] as String[]).remove('green').join(' ')}
red blue