Você está na página 1de 22

Busca...

Comeando um projeto no Play!


Framework usando Java
Postado dia 23/05/2014 por Marco Salles e Fernando Stefanini em Inovao, Java
23

Aqui na Caelum, sempre temos bastante liberdade para experimentar


frameworks, bibliotecas e tcnicas. Nos ltimos meses trabalhamos em um
projeto com o Play! Framework, framework que tem ficado cada vez mais
famoso devido sua facilidade de uso, rapidez no desenvolvimento, otimizaes
de performance e vrias outras vantagens.
Com apenas um comando j se tem um projeto pronto para rodar, sem precisar
de nada mais que um terminal, um browser e o editor de texto ou IDE de sua
preferncia.

Antes de comear a trabalhar com o Play!, voc vai precisar instal-lo.

Instalao
Para baixar o framework, escolha a Classic Distribution mais recente na pgina
de download. Extraia os arquivos na pasta de sua preferncia e configure seu
PATH para poder executar play na linha de comando.
Que tal ento se fizermos um projeto simples para ver como funciona?

Criando um projeto
Comearemos criando um projeto simples para gerenciar cdigos de desconto.
Vamos cham-lo de descontos.
A criao do projeto feita com o comando playnew[nomedoprojeto], que
gera uma estrutura bsica pronta para uso.
$playnewdescontos
_
___||_____
|'_\||/_'||||
|__/|_|\____|\__/
|_||__/
Thenewapplicationwillbecreatedin/diretorio/do/projeto/descontos
O assistente vai perguntar ento o nome do seu projeto. Tecle enter para utilizar
o nome padro entre colchetes e responda prxima pergunta com a opo 2
para que seu projeto seja criado em Java. Aperte enter novamente para realizar a
escolha.
Whatistheapplicationname?[descontos]
>

Whichtemplatedoyouwanttouseforthisnewapplication?

1CreateasimpleScalaapplication
2CreateasimpleJavaapplication

>2

OK,applicationdescontosiscreated.

Havefun!
$
Pronto! Seu projeto est criado. Entre na nova pasta e use o comando play, que
abre um console interno, e nele o comando run para inicializar o servidor na
porta padro: 9000.
$play
[info](...)
_
___||_____
|'_\||/_'||||
|__/|_|\____|\__/
|_||__/
>Type"helpplay"or"license"formoreinformation.
>Type"exit"oruseCtrl+Dtoleavethisconsole.
[descontos]$run

[info](...)
(RunningtheapplicationfromSBT,autoreloadingisenabled)
[info]playListeningforHTTPon/0:0:0:0:0:0:0:0:9000
(Serverstarted,useCtrl+Dtostopandgobacktotheconsole...)
Na primeira vez que o comando for executado o tempo de espera ser um pouco
maior, pois o Play! conferir e baixar automaticamente as dependncias e em
seguida mostrar uma mensagem dizendo que o servidor est disponvel para
uso.
Acesse o endereo localhost:9000 no seu navegador para conferir! Para
interromper a execuo do servidor, aperte ctrl+d na linha de comando.

Agora que nosso projeto est funcionando, precisamos modific-lo, mas


como utilizaremos o Eclipse para isso, temos que faz-lo entender o projeto
Play!

Configurando o ambiente

Nativamente, o framework traz os comandos eclipse e idea, que configuram


automaticamente o ambiente para as duas IDEs. Basta executar o comando
adequado para suas necessidades.
[descontos]$eclipse
[info]AbouttocreateEclipseprojectfilesforyourproject(s).
[info]Compiling(...)
[info]SuccessfullycreatedEclipseprojectfilesforproject(s):
[info]descontos
[descontos]$
Depois de configurado, basta importar o projeto no Eclipse e partir para o
trabalho, mas para isso bom entender um pouco sobre os diretrios do projeto.

A estrutura do projeto
Os diretrios mais importantes de um projeto Play! so os seguintes:
app/, onde ficam os arquivos de cdigo, como views (pginas html),
modelos e controllers (ou quaisquer outras classes Java)
conf/, onde ficam as configuraes de projeto, incluindo rotas, banco
de dados e afins
public/, onde se armazenam os recursos como imagens e arquivos de
estilizao
Como vimos, a pasta app onde boa parte do trabalho ser feito. l que vamos
escrever nosso primeiro cdigo com o Play!

Comeando a aplicao
Como primeiro passo, definiremos uma classe Java que ser nosso modelo para
o cupom de desconto. Vamos, ento, criar a classe CupomDesconto mas, para no
misturar os nossos modelos com os controllers, vamos coloc-la no pacote
models, ou seja, teremos a classe app.models.CupomDesconto. Vamos definir
tambm alguns atributos importantes para o nosso cupom.
1
2
3

packagemodels;

publicclassCupomDesconto{

4
5
6
7
8
9

privateLongid;
privateStringnomeDoCliente;
privateDoublevalor;

//gettersesetters
}

Um passo importante no se esquecer de criar getters e setters para os seus


atributos. A maior parte das funcionalidades do Play! que lidam com os seus
modelos presumiro que voc criou estes mtodos.
Agora precisamos permitir que as instncias desse modelo sejam persistidas no
banco de dados.

Configurando um banco de dados


J temos um modelo, ento est na hora de habilitar o banco no seu projeto. As
principais configuraes do Play! ficam no arquivo conf/application.conf. O
framework te permite nativamente utilizar um banco de dados in-memory para
que voc possa desenvolver sem ter que se preocupar com criar um banco local
imediatamente. Para ativ-lo, basta descomentar as seguintes linhas:
language=conf/application.conf
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play"
db.default.user=sa
db.default.password=""

ebean.default="models.*"
Isso indica ao Play! qual o banco que ele deve usar e tambm que ele pode criar
automaticamente os comandos de banco de dados que geram as tabelas do
modelo. Configuramos tambm o Ebean, implementao ORM que vem por
padro com o Play!, para procurar os modelos no pacote models.
Agora, para dizer ao Play! que seu modelo pode ser persistido, precisamos
adicionar a anotao javax.persistence.Entity, da JPA, sua classe. Por fim,
vamos utilizar as anotaes @Id e @GeneretadValue para definir o id da tabela.
01
02
03

packagemodels;

importjavax.persistence.*;

04
05
06
07
08
09
10
11

importplay.db.ebean.Model;

@Entity
publicclassCupomDescontoextendsModel{
@Id@GeneratedValue
privateLongid;
//...
}

Para facilitar ainda mais, fizemos a classe CupomDesconto herdar da classe


Model. Dessa forma os objetos criados a partir dessa classe j vo possuir
mtodos bsicos para acesso ao banco.
Precisamos reiniciar o servidor para vermos as mudanas. Mas como no
queremos ficar repetindo esse processo a cada modificao que fizermos, vamos
usar um comando que automatiza isso:
[descontos]$~run
O ~run vai recompilar novamente seu projeto e deix-lo pronto para uso aps
cada modificao que voc fizer. Agora acesse seu projeto no navegador e veja o
que acontece! O sistema retorna uma pgina de alerta indicando que
necessrio fazer uma modificao em seu banco.
Clicar no boto Apply this script now! modifica seu banco de dados para que
reflita as mudanas de seus modelos! Isso ocorrer toda vez que houver alguma
mudana nos modelos que precise ser refletida nas tabelas.

Ao mesmo tempo em que aparece a mensagem no navegador, um erro


mostrado na linha de comando. Clique no boto para efetivar as mudanas.
Podemos agora criar as telas que utilizaremos para cadastrar e listar nossos
cupoms.

Views e Controllers Cadastrando e listando modelos


No Play!, as views so escritas em Scala. Assim, podemos incluir cdigo no
HTML para gerar contedo dinamicamente. Se abrirmos o arquivo
index.scala.html veremos o seguinte cdigo:
@(message:String)

@main("WelcometoPlay"){
@play20.welcome(message,style="Java")
}
QuandoutilizarcdigoScalanasviews,precedacom@osmtodosouvariveis.

A primeira linha indica os argumentos que passaremos view antes de


renderiz-la, enquanto na terceira feita uma chamada ao template main (outro
arquivo .scala.html no nosso projeto que contm o esqueleto HTML de todas as
pginas do projeto), e passando para ele o parmetro Welcome do Play. Alm
disso, entre as chaves h o contedo que ser renderizado no <body>.
Repare que se abrirmos o arquivo main.scala.html veremos que a primeira linha
dele contm dois parmetros: um ttulo e o contedo HTML, como vimos na
chamada acima.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15

@(title:String)(content:Html)

<!DOCTYPEhtml>

<html>
<head>
<title>@title</title>
<linkrel="stylesheet"...>
<linkrel="shortcuticon"...>
<scriptsrc="@routes....></script>
</head>
<body>
@content
</body>
</html>

Osarquivos.scala.htmltambmpodemserutilizadosparacriarpartialsoutags.

Agora, vamos fazer o formulrio para criar novos cupoms de desconto. Crie o
arquivo formularioNovoCupom.scala.html no pacote views, receba nele o
formulrio de CupomDesconto formCupom (do tipo Form[CupomDesconto]), insira
o template main, passando como parmetro o ttulo da pgina e crie o esqueleto
do formulrio HTML em seu corpo.
1
2
3
4
5
6
7

@(formCupom:Form[CupomDesconto])

@main("CadastrarCupom"){
<formaction="/cupom/novo"method="POST">
<inputtype="submit"value="Criar">
</form>
}

Vamos agora usar os helpers do Play! para criarmos os campos do formulrio.


Importe todos e faa uma chamada ao inputText(), que cria a estrutura HTML de
um campo para entrada de texto. Este mtodo recebe como parmetro um Field
do formulrio, que acessamos com formCupom("nomedocampo"), e pode receber
o texto para uma label utilizando a sintaxe '_label>"textodaetiqueta".
01
02
03
04
05
06
07
08
09
10

@(formCupom:Form[CupomDesconto])
@importhelper._

@main("CadastrarCupom"){
<formaction="/cupom/novo"method="POST">
@inputText(formCupom("nomeDoCliente"),'_label>"Nomedocliente")
@inputText(formCupom("valor"),'_label>"Valor")
<inputtype="submit"value="Criar">
</form>
}

AsviewsemScalasocompiladasemumpacoteJavaparaquevocpossapassar
argumentoseidentificarerrosemtempodecompilaonoseucdigoHTML,
mostradosnalinhadecomando.

Pronto! Para ver seu formulrio, precisamos utilizar um controller para


renderiz-lo. Por hora, podemos faz-lo no lugar da pgina principal. Na classe
app.controllers.Application, utilize a classe play.data.Form para gerar um
formulrio de CupomDesconto e utilize-o para renderizar a pgina que acabou de
criar.

A instruo Form.form(CupomDesconto.class) um mtodo de ajuda do Play! que


cria uma estrutura de formulrio pronta para ser utilizada nas pginas HTML.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16

packagecontrollers;

importmodels.CupomDesconto;
importplay.*;
importplay.data.Form;
importplay.mvc.*;
importviews.html.*;

publicclassApplicationextendsController{

publicstaticResultindex(){
Form<CupomDesconto>form=Form.form(CupomDesconto.class);
returnok(formularioNovoCupom.render(form));
}

Ao abrir a pgina no navegador, voc j pode ver o formulrio pronto

mas ao clicar o boto de envio, recebemos uma tela de alerta, dizendo que a URL
de envio ainda no existe e listando todas as URLs existentes.

Repare que a view criada ser usada para a criao de novos descontos, porm
ns a chamamos no mtodo index(). Vamos refazer essa parte do projeto para
que fique melhor estruturado comeando pelo controller: vamos mover o
contedo do mtodo index() para formularioNovoCupom() e criar um novo
mtodo que vai receber os dados enviados, novoCupom(). A varivel TODO uma
pgina padro amigvel do Play! para te lembrar de terminar sua
implementao.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15

publicclassApplicationextendsController{

publicstaticResultindex(){
returnTODO;
}

publicstaticResultformularioNovoCupom(){
Form<CupomDesconto>form=Form.form(CupomDesconto.class);
returnok(formularioNovoCupom.render(form));
}

publicstaticResultnovoCupom(){
returnTODO;
}
}

Agora falta criar as URLs. Isto feito no arquivo conf/routes, dizendo, em


ordem, o tipo de requisio (GET, POST, DELETE, etc), sua URL e o mtodo
executado na chamada. A rota que chama o mtodo
app.controllers.Application.index() abaixo nossa pgina inicial. Criamos
alm dela URLs /cupom/novo, com tipos GET e POST, cada uma chamando um dos
novos mtodos do controller.
#Homepage
GET/controllers.Application.index()
GET/cupom/novocontrollers.Application.formularioNovoCupom()
POST/cupom/novocontrollers.Application.novoCupom()
...
Agora podemos acessar tanto a pgina inicial quanto o formulrio, e ao tentar
criar um novo cupom de desconto no vemos mais o alerta e sim a mesma tela
de nosso index:

Agora que temos rotas configuradas, podemos utilizar o helper.form, que recebe
uma rota como argumento, para ajudar a gerar o formulrio.
1
2
3
4
5
6
7

@main("CadastrarCupom"){
@helper.form(routes.Application.novoCupom){
@inputText(formCupom("nomeDoCliente"),'_label>"Nomedocliente")
@inputText(formCupom("valor"),'_label>"Valor")
<inputtype="submit"value="Criar">
}
}

Vamos tambm modificar todo o nosso index para mostrar todos os cupons que
tivermos cadastrado, recebendo do controller a lista completa. Ao final da lista,
criamos tambm um link para criar novos cupons!
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23

@(cupons:List[CupomDesconto])

@main("ListadeCupons"){
@if(cupons.isEmpty){
<h3>Nohcuponscadastrados</h3>
}else{
<h3>CuponsCadastrados:</h3>
<table>
<tr>
<th>id</th>
<th>cliente</th>
<th>valor</th>
</tr>
@for(cupom<cupons){
<tr>
<td>@cupom.getId</td>
<td>@cupom.getNomeDoCliente</td>
<td>R$@cupom.getValor</td>
</tr>
}
</table>
}
<hr>

24
25

<ahref="@routes.Application.formularioNovoCupom">Novocupom</a>
}

Note que agora a index recebe um parmetro do tipo List para mostrar os
cupons j cadastrados. Por enquanto, no controller, vamos adicionar uma lista
vazia para no termos problemas de compilao, e nos preocuparemos em
receber os cupons reais mais tarde.
1
2
3

publicstaticResultindex(){
returnok(index.render(newArrayList()));
}

Abrindo o navegador em localhost:9000 possvel ver a pgina agora


renderizada corretamente.

Agora estamos prontos pra efetivamente cadastrar e listar os cupons de


desconto.

Lidando com formulrios e cadastrando cupons


Repare que, at agora, o nosso formulrio de cadastros no faz nada alm de
retornar uma pgina em construo. Vamos receber os dados enviados atravs
do formulrio. Para lidar com formulrios enviados por requisio, o Play! nos
oferece vrias ferramentas. Vamos utilizar o mtodo bindFromRequest() para
receber o formulrio enviado pela view, hasErrors() para rodar as validaes
automticas no formulrio, get() para receber o objeto CupomDesconto montado

a partir do formulrio e o mtodo save() do nosso CupomDesconto, herdado de


Models e responsvel por salvar o objeto em banco. Aps salvar o cupom no
banco, o usurio redirecionado direto pra lista de cupons j criados.
1
2
3
4
5
6
7
8
9

publicstaticResultnovoCupom(){
Form<CupomDesconto>form=Form.form(CupomDesconto.class).bindFromReque
if(form.hasErrors()){
returnbadRequest(formularioNovoCupom.render(form));
}
CupomDescontocupomDesconto=form.get();
cupomDesconto.save();
returnredirect(routes.Application.index());
}

Neste caso, se as validaes automticas falharem, repare que renderizamos a


mesma view passando para ela o formulrio j com os dados preenchidos, para
que o usurio re-entre os dados sem que perca tudo que digitou.
S falta listar os cupons criados! Vamos para o ltimo passo.

Recuperando dados do banco


Agora que fomos capazes de salvar dados, queremos que o nosso index mostre
os dados salvos. Para isso, vamos precisar passar para a view do index uma lista
real de cupons toda vez que ela for renderizada (por enquanto estamos passando
uma lista vazia). Para recuperar os dados utilizaremos a classe
com.avaje.ebean.Ebean, configurado l em cima, criando uma query de um
modelo especifico e pedindo a lista de todas as entradas da tabela com
findList().
1
2
3
4

publicstaticResultindex(){
List<CupomDesconto>cupons=Ebean.createQuery(CupomDesconto.class
returnok(index.render(cupons));
}

Obs:existeumpadrodeprojetosqueestabelecequemtodosqueacessamobanco
dedadosdevemficarconcentradosemumaclasseseparada(DAOs,ouDataAccess
Objects),dentrodeumpacotecomclassesespecficasparaessafinalidade,para
tornarocdigomaislegvel.Nesteexemplofizemosachamadanoprprio
controllerparamanterasimplicidade,masvalelembrarquenohumcertoou
errado.Sequisersabermaissobreorganizaodepacoteseclasses,leiaesse
postsobrecomoorganizarospacotesdasuaaplicao.

Consideraes Finais
O que vimos at agora foram as caractersticas bsica de um projeto em Play!,
parte da estrutura do projeto e algumas das operaes de CRUD. H ainda um
grande nmero de funcionalidades a serem exploradas neste framework e que
podem ser vistas no site do Play!, alm do Workshop que ser ministrado pelo
Alberto Souza.

Compartilhe

Tags: Java, mvc, play

Facebook

Twitter

Marco Salles(Google+)

Fernando Stefanini

23 COMENTRIOS

Francisco
23/05/2014 at 12:45 #

Parabns a vocs pelo post.

Douglas Arantes
23/05/2014 at 17:28 #

Parabns pelo post.


Vocs ai da Caelum, j utilizaram ou possuem alguma opinio sobre Groovy/ Grails
?

Ccio
24/05/2014 at 10:09 #

Excelente post! timo pra quem quer comear a usar o Play Ele legal, mas
sinceramente, sou muito mais o VRaptor! =) O Play cheio de mtodo esttico,
tornando mais difcil realizar testes A verso do VRaptor com CDI, na minha
humilde opinio, a melhor opo pra quem vai usar Action-Based.

Adriano Almeida
24/05/2014 at 11:53 #

Oi Ccio, realmente so abordagens bem distintas. A vai muito do gosto do


desenvolvedor tambm. A testabilidade no Play! um pouco diferente mesmo,
bem por isso que voc citou.

Rafael Jesus
24/05/2014 at 12:13 #

Gostaria de ver mais empresas usando o Play, assim como 1 milho de novos
frameworks ele baseado no Rails,
Mas sua grande vantagem mesmo ser:
Non-blocking I/O
RESTful por default
Asset Compiler igual do Rails para CoffeeScript, LESS, SASS
Incrvel Console para testar, etc..
Simplifica 0 desenvolvimento em Scala + Web

mariane machado
26/05/2014 at 10:53 #

Site para boardgames que eu eu e mais um desenvolvedor fizemos recentemente


usando play framework + java

mariane machado
26/05/2014 at 10:53 #

Quem quiser ver um exemplo real, esse um site para boardgames que eu eu e
mais um desenvolvedor fizemos recentemente usando play framework + java:
http://www.getboxed.co

renato
02/06/2014 at 10:35 #

muito legal.

Alcides Junior
25/10/2014 at 15:33 #

Ol! tentei reproduzir o exemplo acima adaptado a minha necessidade, porm o


compilador acusa um erro no qual no consigo achar soluo.
Compilation error
error: cannot find symbol
In C:\Users\alcides junior\Documents\cadastros\app\controllers\Application.java
at line 18.
15public class Application extends Controller {
16
17public static Result index(){
18List ordemServico = Ebean.createQuery(OrdemServico.class).findList();
19return ok(index.render(ordemServico));
20}
21 public static Result formularioNovaOS() {
22 Form form = Form.form(OrdemServico.class);
23 return ok(formularioNovaOS.render(form));

Marco Salles
27/10/2014 at 01:07 #

Alcides, voc se lembrou de importar a interface List? Entre a declarao do


pacote e do nome da classe, confira se existe a linha:

importjava.util.List;
Ou talvez a sua classe OrdemServico. O erro apontado se refere a alguma classe ou
interface utilizada que no foi corretamente importada ou que no existe. Espero
que isso ajude!

Mauro
03/11/2014 at 16:03 #

Muito bom o post.


Vocs sabem de mais exemplos de aplicaes que foram feitas com play?
Muito obrigado

Marco Salles
03/11/2014 at 19:21 #

Sei que o Linkedin e o theguardian utilizam a ferramenta! Na pgina dela deve


existir alguma propaganda sobre outros sistemas famosos baseados em play!

Alain Oliveira
05/11/2014 at 12:53 #

Ol! Colegas, desenvolvo web j tem um bom tempo em Java integrando


JSF/Primefaces, Spring, Spring Security, Hibernate, entre outros. Por mais
conhecimento que eu j tenha ainda no consegui juntar tudo isso sem um ou
outro bug..rs.
Estive olhando o Play esses dias e fazendo alguns testes. Na opinio de vocs e
pelos testes que fizeram, para aplicaes corporativas rodando localmente, seria
uma boa ideia adotar o Play?
Costumo tambm adquirir os templates html que utilizamos, principalmente no
themeforest.net. Para integrar no JSF e at no Prime j est tranquilo. E no Play?
Vi alguns posts falando sobre a camada de viso do Play e achei um tanto
complexo o tratamento que ele faz.
Muito obrigado e parabns pelo post! Abraos.

Fernando Stefanini
06/11/2014 at 17:10 #

Ol Alain. Tentando responder suas perguntas no tem nenhum problema em


usar o Play para suas aplicaes locais. Assim como todos os outros que voc citou,
ele resolve os mesmos problemas. Um ponto interessante que ele j vem com
algumas tecnologias integradas e com necessidade quase mnima de configurao.
Alm disso, para mim, o console dele faz bastante diferena. Permitindo que
tarefas rotineiras como: deploy, parar e subir o servidor e etc, fiquem mais fceis.
Em relao a ltima parte, de novo no tem problema algum :). O mecanismo de
template do Play! permite que voc separe de maneira fcil os trechos que se
repetem Como tudo vira classe, no final s uma questo de invocar os mtodos
que retornam os trechos de html que vc precisa.

Carlos Ystranho
07/11/2014 at 14:32 #

Ol Pessoal !
Sou mais um iniciante no Play! O artigo est muito bacana. Mas antes de decidir se
realmente vou utiliz-lo vou experimentar tambm o VRaptor. Inclusive estou
adquirindo o livro do VR na Casa do Cdigo.
Atc,
Carlos Ystranho
Analista e Desenvolvedor

Alain Oliveira
07/11/2014 at 14:41 #

Ol Fernando. Muito obrigado pelas dicas.


Em pouco mais de uma semana brincando com o Play fica evidente ao extremo o
ganho de produtividade. Mas como ainda estou s em aplicaes bsicas, estou
pensando em levar ele um pouco mais a srio para chegar a utilizar em aplicaes
corporativas.
Realmente, dando uma destrinchada um pouco melhor nessa camada de viso, vi
que bem simples de integrar aos templates prontos.

Mas o que realmente me chamou a ateno a curva de aprendizado: acredito que


em menos de um ms d pra usar recursos com as tecnologias que citei acima que
levei meses pra aprender.
Realmente, estou me surpreendendo

Carlos Ystranho
07/11/2014 at 14:44 #

Ahhh !!! S mais uma perguntinha: Vocs j utilizam o ACTIVATOR-1.2.10 em


substituio ao Play Console ? Tentei usar o Activator mas sempre me deparo com
o erro de JAVA_HOME no definida, sendo que a mesma se encontra
configurada. Fiz teste com Java6, 7 e 8 e o erro persiste. Para ser mais preciso o
erro o seguinte: A Java JDK is not installed or cant be found. JAVA_HOME =
C:\Java\jSdk8. Isso acontece tanto no WinXP e 7-x64 Se algum puder me
ajudar, desde j agradeo.
OBS: Desculpem-me, pois aqui no forum mas, quem sabe se algum no passou
por isso e resolveu.
Atc,
Carlos Ystranho

Alain Oliveira
18/11/2014 at 14:53 #

Ol Carlos,
No havia visto sua pergunta. Bom, se a JAVA_HOME est configurada
corretamente (tente executar algum comando java no console) s configurar a
varivel Path apontando para a pasta onde extraiu o pacote baixado. Por exemplo:
eu extra os pacotes e arquivos(repository, templates, activator, etc.) na pasta
Play. L na varivel Path s apontei o caminho para esta pasta.
Depois que voc cria um projeto, por exemplo um helloworld, para executar o
mesmo voc tem que estar na pasta do projeto e digitar: activator.
Aqui uso o Win 8.1 e Ubuntu Server 14.01 e est tudo Ok.
Att.

Jos Marcos de Moraes

30/12/2014 at 13:27 #

Muito interessante o post, mas estou com um problema quando importo


o projeto para o eclipse. A IDE mostra dois erros:
Project descontos is missing required library: C:\descontos\target\scala2.10\classes_managedfilmesBuild pathBuild Path Problem
The project cannot be built until build path errors are resolveddescontos
UnknownJava Problem
Mesmo setando a classe no build path, salvando o projeto e saindo do Eclipse
(Luna EE), o erro persiste, sendo que as vezes preciso resetar a mquina porque
no consigo acessar o Eclipse, pois, me d a seguinte mensagem: Failed to create
the Java Virtual Machine.
A mquina que estou testando a aplicao de 32 bits com Windows 7, o java o
jdk 1.7.0_72 e a verso do Play a 2.2.6.
Fico no aguardo de uma resposta. Grato.

Ruan
16/01/2015 at 11:19 #

Muito bom o post.


Mas estou com uma dvida. Como compor o mtodo save()?
Que o responsvel por salvar o objeto no banco de dados.

Marco Salles
04/03/2015 at 14:12 #

Os mtodos save() e update() sero herdados ao estender a classe Model. Voc


pode sobrescrever o mtodo, se desejar, mas no necessrio. Se houver
composio de modelos, voc pode definir o tipo de cascateamento dos modelos.
Aqui tem exemplo bem explicativo de como funciona cada tipo de cascateamento.

DEIXE UMA RESPOSTA

Nome (Obrigatrio)

Email (Obrigatrio)
Comentrio

Enviar comentrio

BLOG.CAELUM.COM.BR 2015.

Site