Primeiro exemplo utilizando o framework Play

Pessoal, boa noite

Estou me aventurando pelo Play! Framework devido aos projetos da empresa onde vou trabalhar adotar esta tecnologia de desenvolvimento ágil. Para quem ainda não conhece (como eu, por enquanto), segue o site dos caras: http://www.playframework.com/ Pra quem conhece, é o seguinte. Ontem eu estava lendo sobre um exemplo no proprio site dos caras http://www.playframework.com/documentation/2.1.1/JavaTodoList sobre o desenvolvimento de um exemplo em Play. Estou fazendo igual ao exemplo, mas estou travado em um erro aqui. Vou passar tudo o que fiz para facilitar:

Classe model: Task.java


package models;

import java.util.*;


import play.data.validation.Constraints.*;


public class Task
{
	public long id;

	@Required
	public String label;

	public static List<Task> all()
	{
		return new ArrayList<Task>();
	}	

	public static void create(Task task)
	{
		
	}

	public static void delete(Long id)
	{
		
	}
}

//Classe controller: Application.java

package controllers;


import play.*;

import play.mvc.*;


import views.html.*;


import play.data.*;
import models.*;


public class Application extends Controller {


	static Form<Task> taskForm = Form.form(task.class);

	/*
  
    public static Result index() {

        return ok(index.render("Your new application is ready."));

    }*/

	
	
	public static Result index(){
		return ok(routes.Application.tasks());
	}
	

	public static Result tasks(){
		return ok(views.html.index.render(Task.all, taskForm));

	}

	public static Result newTasks(){
	
		return TODO;

	}

	public static Result delete(Long id){
		return TODO;
	}

}

//View: index.scala.html

@(tasks: List[Task], taskForm: Form[Task])
@import helper._
@main("Todo list"){
	<h1>@tasks.size() task(s)</h1>
	<ul>
		@for(task <- tasks)
		{
			<li>
				@task.label
				@form(routes.Application.deleteTask(task.id))
				{
					<input type="submit" value="Delete">
				}
			</li>
		}
	</ul>

	
	<h2>Add a new task</h2>
	@form(routes.Application.newTask())
	{
		@inputText(taskForm("label"))
		<input type="submit" value="create">
	}
}

//Arquivo routes

# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# Home page


GET     /                           controllers.Application.index()



GET		/tasks				controllers.Application.tasks()

POST	/tasks				controllers.Application.newTasks()
POST	/tasks/:id/delete		controllers.Application.delete(id: Long)


# Map static resources from the /public folder to the /assets URL path

GET     /assets/*file               controllers.Assets.at(path="/public", file)

O erro vou anexar em formato de imagem (pois os erros de Play aparecem no browser para o usuário)

Como estou começando agora, peço desculpas se a solução for tão facil. Enquanto não recebo nenhuma santa ajuda…rs vou à caça da solução. =D

Segue o erro em anexo.

Agradeço desde já.


O erro nesse caso é bem sutil e chato de enxergar mesmo. O template do play está se confundindo porque você colocou a chave na linha de baixo. Tente assim que deve funcionar ou pelo menos mudar de erro:

[quote=jcranky]O erro nesse caso é bem sutil e chato de enxergar mesmo. O template do play está se confundindo porque você colocou a chave na linha de baixo. Tente assim que deve funcionar ou pelo menos mudar de erro:

@for(task &lt;- tasks){

Bom dia, jcranky.

Cara realmente era isso, alterei conforme sua indicação. E realmente, eu nunca ia imaginar que o erro poderia ser por isso. Mas agora estou travado em outro erro cara. Tentei solucionar aqui passando por todos os códigos desenvolvidos, porém sem sucesso. Vou anexar o segundo erro pra facilitar. Espero que seja o último erro, hehe.

Se puder me ajudar nesse tipo de erro, agradeço.

Valeu, desde já.


Me parece que você está tentando fazer o index renderizar as tasks, é isso? Repare que você meio que está colocando um Result dentro de outro - no index, tente sem o ok, só a chamada ao outro método do controller.

boa noite.

Desculpas pela demora em responder sobre o progresso. Cara, sobre o ultimo erro, alterei o método action para redirecionar:

public static Result index(){
		return redirect(controllers.routes.Application.tasks());
	}

aquele ultimo erro sumiu. Agora estou com outro. Segue em anexo o print da tela de erro.

Obrigado por estar me auxiliando cara. Realmente você está me ajudando muito.


Sem problemas :slight_smile:

Esse Task existe? Ele têm um método estático chamado all? Imagino que é isso que queira, pelo o que dá para ver no código que aparece no erro.