
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}
Resumo muito útil pra quem ta começando. Direto ao ponto!
ResponderExcluir