sábado, 16 de marzo de 2013

Primeros pasos con Play! Part 5

Y luego de un descanso seguimos aprendiendo play framework. Recuerden que nos habíamos quedado acá:

http://emanuelpeg.blogspot.com.ar/2013/02/primeros-pasos-con-play-part-4.html

Nos habíamos quedado en crear el modelo de Algo:

package models

case class Algo (id: Long, nombre: String, descripcion: String)

object Algo {
 
  def all(): List[Algo] = Nil
 
  def create(nombre: String, descripcion: String) {}
 
  def delete(id: Long) {}
 
}

Bueno creamos la case class Algo que nos sirve de modelo y luego un Objeto que va a realizar las tareas de listar, crear y borrar. Por ahora es un Objeto Dummy, onda que no hace nada pero luego vamos a implementar su interacción con la base de datos.

Para el que no este familiarizado con case class de scala puede leer esto: http://www.scala-lang.org/node/107.

Ahora vamos a hacer la pagina principal:


@(algos: List[Algo], algoForm: Form[String])

@import helper._

@main("Todo list") {
   
    <h1>@algos.size algo(s)</h1>
   
    <ul>
        @algos.map { algo =>
            <li>
                @algo.nombre
               
                @form(routes.Algo.delete(algo.id)) {
                    <input type="submit" value="Delete">
                }
            </li>
        }
    </ul>
   
    <h2>Add a new Algo</h2>
   
    @form(routes.Algo.newAlgo) {
       
        @inputText(algoForm("Nombre"))
       
        @inputText(algoForm("Descripcion"))
       
        <input type="submit" value="Create">
       
    }
   
}

Vamos a explicar un poquito, al principio declaramos una lista de Algo y un formulario; luego imprimimos cuantos algos hay y generamos un listado; permitiendo que se puedan eleminar; y para finalizar permitimos crear nuevos algos.

También importamos helper._ el cual nos ayuda a la creación de formularios. Normalmente un formulario crea un <form> de html.

Ahora vamos al controller a decirle que muestre nuestra nueva pagina:



package controllers

import play.api._
import play.api.mvc._

import play.api.data._
import play.api.data.Forms._

object Algo extends Controller {

  def index = Action {
    val algoForm = Form(
      "Nombre" -> nonEmptyText)
    Ok(views.html.algoIndex(models.Algo.all() ,algoForm))
  }

  def newAlgo = TODO

  def delete(id: Long) = TODO

}


Como vemos hemos hecho un formulario y le dijimos que nombre es requerido. Además que vaya a nuestra pagina.

Si vamos a http://localhost:9000/algo veremos la siguiente pagina:



Hermosa salvo porque todavía no guarda en la base de datos... Pero esto será en el próximo post!