terça-feira, abril 26, 2011

Dicas Rápidas de Grails para quem vem do Java - Controllers




Segue abaixo exemplo contendo várias informações sobre controllers.
Para ver documentação oficial, visite grails.org.

Se lhe foi útil, deixe um comentário (pode ser anônimo).


1. Basico de actions
class ToperaController {
def teste = {
render "Hello World"
}
}

Acessado via: http://localhost/minha-app/topera/teste


2. Tipos de encerramento de actions

class ToperaController {

// retornar HTML cru
def html = {
render "Hello World"
}

// requestDispatcher pra view gsp (traducao: manda os dados prum html externo)
// o gsp que será procurado pelo server é o views/topera/html2.gsp
def html2 = {
[msg: "Hello Crazy World!!"]
}
// e o gsp poderia ser "A mensagem recebida foi ${msg}"

// renderiza JSON, criando obj na hora
def json1 = {
render(contentType:"text/json") {
[nome: "rafael", idade:29]
}
}

// renderiza JSON, usando objeto pre-existente
def json2 = {
def pessoa = new Pessoa([nome: "rafael", idade:29])
render(contentType:"text/json") {pessoa}
}

// renderiza JSON (outra forma)
def json3 = {
render new Pessoa([nome: "rafael", idade:29]) as JSON
}  

/*
* Obs: os retornos em JSON podem ser lidos direto pelo javascript. Com jQuery seria assim:
* 
* $.getJSON("http://localhost/minha-app/topera/b2", function(pessoa){
*    alert("Nome pego no servidor foi " + pessoa.nome);
* });   
*/

// renderiza de acordo com tipo de url
// "topera/varios.json" pega json e "topera/varios.html" pega html
def varios = {
def pessoa = new Pessoa([nome: "rafael", idade: 29]);
withFormat {
html {render "Nome:  $pessoa.nome
Idade:  $pessoa.idade"}
json {render pessoa as JSON}
}
}

// monta html via objeto
def htmlObj = {
render {
div(id:"meuId"){
b ("Mensagem")
}
}
}

// retorna stream de arquivo binario
def figura = {
response.setContentType("image/jpeg")
response.outputStream << new File("D:/foto.jpg").readBytes()
}

// redireciona pra ToperaController.html() (dá um sendRedirect, isto é, browser recebe informacao para redirecionar)
def redirect1 = {
redirect controller: 'topera', action: 'html'
}

// redireciona pra action a, no mesmo controller
def redirect2 = {
redirect action: 'html'
}

// encaminha para outra action, SEM envolver client (browser)
def forward = {
forward action: 'html'
}

}

class Pessoa {def nome, idade}

Um comentário:

  1. Resumo muito útil pra quem ta começando. Direto ao ponto!

    ResponderExcluir