Filters
06/09/2012 19:20
0
Galera,

Estou com um sério problema na minha aplicação. Eu estou seguindo as video-aula do Kico, da DevMedia.
E quando chega no filtro da um problema com o redirect muito sério. Quando o filter completa ele diz que não acha o a página index.gsp.
Eu sei que já tem tópico no fórum sobre isso, mais eu já postei e ninguém respondeu.
Tags: Filters, redirect


0
Oi Luis, existe em grails-app/views/ uma pasta com o nome do controller e um arquivo index.gsp, estou perguntando pois não assisti as aulas do kiko do devMedia, mas posso tentar ajudar.
06/09/2012 20:21


0
Sim existe a página lá.
Se eu comentar o return do filtro e o redirect da esse aviso.
Se eu comentar só o return a aplicação nem abre.
Se eu comentar só o redirect da esse aviso também.
06/09/2012 21:02


0
Pode postar o código do controller e a mensagem de erro ?
06/09/2012 22:25


0
Código do controller:
import org.springframework.dao.DataIntegrityViolationException

class UsuarioController {

static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

def index() {
redirect(action: "list", params: params)
}

def list(Integer max) {
params.max = Math.min(max ?: 10, 100)
[usuarioInstanceList: Usuario.list(params), usuarioInstanceTotal: Usuario.count()]
}

def create() {
[usuarioInstance: new Usuario(params)]
}

def save() {
def usuarioInstance = new Usuario(params)
if (!usuarioInstance.save(flush: true)) {
render(view: "create", model: [usuarioInstance: usuarioInstance])
return
}

flash.message = message(code: 'default.created.message', args: [message(code: 'usuario.label', default: 'Usuario'), usuarioInstance.id])
redirect(action: "show", id: usuarioInstance.id)
}

def login = {
def loginUsuario = params["login"]
def senhaUsuario = params.senha

def usuario = Usuario.findByLoginAndHashSenha(loginUsuario, senhaUsuario.encodeAsPassword())
//def senha = Usuario.findByLogin(loginUsuario)

//Mesmo que if(usuario != null)
if(usuario){
session["usuario"] = usuario
redirect(action:"list", controller:"link")
}else{
render("Usuário não encontrado no sistema")
}
}

def show(Long id) {
def usuarioInstance = Usuario.get(id)
if (!usuarioInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), id])
redirect(action: "list")
return
}

[usuarioInstance: usuarioInstance]
}

def edit(Long id) {
def usuarioInstance = Usuario.get(id)
if (!usuarioInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), id])
redirect(action: "list")
return
}

[usuarioInstance: usuarioInstance]
}

def update(Long id, Long version) {
def usuarioInstance = Usuario.get(id)
if (!usuarioInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), id])
redirect(action: "list")
return
}

if (version != null) {
if (usuarioInstance.version > version) {
usuarioInstance.errors.rejectValue("version", "default.optimistic.locking.failure",
[message(code: 'usuario.label', default: 'Usuario')] as Object[],
"Another user has updated this Usuario while you were editing")
render(view: "edit", model: [usuarioInstance: usuarioInstance])
return
}
}

usuarioInstance.properties = params

if (!usuarioInstance.save(flush: true)) {
render(view: "edit", model: [usuarioInstance: usuarioInstance])
return
}

flash.message = message(code: 'default.updated.message', args: [message(code: 'usuario.label', default: 'Usuario'), usuarioInstance.id])
redirect(action: "show", id: usuarioInstance.id)
}

def delete(Long id) {
def usuarioInstance = Usuario.get(id)
if (!usuarioInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), id])
redirect(action: "list")
return
}

try {
usuarioInstance.delete(flush: true)
flash.message = message(code: 'default.deleted.message', args: [message(code: 'usuario.label', default: 'Usuario'), id])
redirect(action: "list")
}
catch (DataIntegrityViolationException e) {
flash.message = message(code: 'default.not.deleted.message', args: [message(code: 'usuario.label', default: 'Usuario'), id])
redirect(action: "show", id: id)
}
}
}


O erro:


Obs.: Na console não aparece erro nenhum. Se quiser ponho o código do filtro também.
10/09/2012 13:46


0
e você chama no browser o seguinte endereço http://localhost:8080/app/usuario ?
10/09/2012 17:53


0
Eu chamo http://localhost:8080/app
10/09/2012 17:55


0
O problema está na localização do seu arquivo index.gsp.
A partir da versão 1.2, este deve ficar na raíz do diretório views se não me engano.


0
Kico,

Mais ele está na raiz cara.

10/09/2012 18:48


0
Olhem, meu filter está assim:


class AcessoFilters {

def Filters = {

//porurl(url:'/Blogger/usuario/**')

//Usado em todos os controllers e todas as actions.
acesso(controller:'*', actions:'*') {

//Executado antes da action
before = {

//Se session.usuario for null
if((!session.usuario) && (!actionName.equals("login"))){
flash.message = "Para acessar essa pagina voce deve se logar antes!"
redirect(url:'/')
return false
}
return true
}
}
}
}


Se eu comentar a linha redirect, e os dois return, funciona normalmente, só que o filtro não funciona.
11/09/2012 16:25


0
NInguém?
14/09/2012 15:35


0
Oi Luís, tem como você postar o seu UrlMappings.groovy aqui?

Desconfio que o problema está ali.


0
Kico,

Eu nem cheguei a mexer nele, mais está aí:


class UrlMappings {

static mappings = {
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}

"/"(view:"/index")
"500"(view:'/error')
}
}
18/09/2012 12:34


0
Luíz, me lembrei de um detalhe interessante: o seu filtro está no diretório grails-app/conf?

No Grails 1.2 ele havia mudado de lugar.


0
Sim, eu criei ele no conf.
18/09/2012 13:48


0
Ah, agora que encontrei o problema.

Banal a causa: no seu filtro, não é "actions", mas "action" como abaixo:


acesso(controller:'*', action:'*') {

//Executado antes da action
before = {

//Se session.usuario for null
if((!session.usuario) && (!actionName.equals("login"))){
flash.message = "Para acessar essa pagina voce deve se logar antes!"
redirect(url:'/')
return false
}
return true
}


0
Agora da esse erro aqui:

18/09/2012 14:15


0
A única coisa que você fez foi trocar o "actions" por "action"?


0
Sim.
18/09/2012 15:49


0
Oi Luíz, buscando no Google encontrei algo pra você.

Procure modificar o seu arquivo UrlMappings.groovy para algo como o código abaixo:


"/" {
controller = "user"
action = "login"
}



Da uma olhada neste link: http://stackoverflow.com/questions/8089592/upgrade-to-grails-2-0-index-gsp-not-found


0
Resolveu não.
Eu descobri o problema.
No Grasil 2.0 não tem mais acesso direto a gsp, eu tenho que mapear no urlmapping o controller e o action, pelo que entendi.
18/09/2012 17:28


0
Oi Luís,

nunca houve acesso direto ao GSP.


0
Entendo entendi errado...

Enfim...estou tentando corrigir agora, assim que eu tiver uma solução eu posto aqui para todos saberem o que eu fiz.
18/09/2012 17:58



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto