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>