Play 2.0

Propaganda
Play 2.0
GERANDO A SAÍDA COM “VIEW TEMPLATES”
View Templates

Mecanismo para gerar páginas HTML (JSON, XML,
CSV) usando a Linguagem Scala

Vantagens

As páginas “type-safe”: o código da página é
compilado

Erros de tipos aparecem na compilação e não na

As páginas são compostas basicamente por código
HTML e código Scala (aparece com o símbolo @)

Não precisa conhecer Scala para produzir as
páginas

Scala é parecida com Java

catalog.getProduct(ean);
Exemplo de
“type-safe” template
@(produtos: List[Produto])
Definição dos parâmetros
<ul>
@for(produto <- produtos) {
<li>
@produto.nome
</li>
}
</ul>
List<Produtos> lista = new ArrayList();
view.render(lista)
Sintaxe do Template em
Scala

Por que usar Scala?


Scala é mais sucinta do que Java

String x = “IFRN”;

System.out.println(“IFRN”);

val x = “IFRN”

println(“IFRN”)
Java
Scala
O código em Scala aparece precedido de @
Definição do Template

Começa com os parâmetros


@(produtos: List[Produto], count: Int)
Sintaxe de Scala

Parâmetros


Nome: tipo
Tipo Genérico


Em Java seria:
@(List<Produto> produtos, int count)
List[Produto]
Tipos Básicos

Int (ao invés de int ou Integer)
Template do Corpo da
Página

Todo o conteúdo da página é considerado um
texto exceto os códigos começando com @
<dl>
@for(product <- products) {
<dt>
<a href="@routes.Products.show(product.ean)">
@product.ean - @product.name
</a>
</dt>
<dd>@product.description</dd>
}
</dl>
Comentários
@* This is a comment. *@
@**
* A product listing.
*
* @param products The products to list
*@
Iterando sobre uma Lista
<dl>
@for(product <- products) {
<dt>
<a href="@routes.Products.show(product.ean)">
@product.ean - @product.name
</a>
</dt>
<dd>@product.description</dd>
}
</dl>
Iterando sobre um Map
@(eanMap: Map[Long, Product])
<dl>
@for((ean, product) <- eanMap) {
<dt>
<a href="@routes.Products.show(ean)">
@ean - @product.name
</a>
</dt>
<dd>@product.description</dd>
}
</dl>
Iterando com Variáveis
de Índice
@(products: Set[Product])
<dl>
@for((product, i) <- products.zipWithIndex) {
<dt>
<a href="@routes.Products.show(product.ean)">
Product @i - @product.name
</a>
</dt>
<dd>@product.description</dd>
}
</dl>
If
@if(products.isEmpty()) {
<p>No products found.</p>
} else {
<dl>
// List products here.
</dl>
}
@if(products isEmpty) {
Declarando variáveis
@defining(user.firstName + " " +
user.lastName) { fullName =>
<div>Hello @fullName</div>
}
Declarando código
reusável
@display(product: models.Product) = {
@product.name ([email protected])
}
<ul>
@products.map { p =>
@display(product = p)
}
</ul>
Download