Método Utilizados em Várias Views
25/03/2012 17:54
0
Boa tarde,

Sou novo na comunidade e atualmente sou programador Java, utilizando JSF, estou me aventurando no Grails agora.

Bem vamos a dúvida, tenho um controller que tem uma ação, quero que essa ação seja utilizada por várias páginas. Hoje está funcionando para uma página em especifico, pois meu render aponta para uma determinada view.

O que quero é que essa ação seja executada e que seja renderizada a mesma página. Fazendo uma analogia a JSF seria apenas criar um método com return null.

Agradeço desde já.
Tags: render, view, jsf


0
Opa, encapsule este método em um serviço ao invés de em um controlador.
Se o resultado for na realidade dados formatados para determinado fim, crie um controlador só pra isto, assim você centraliza o acesso e não fica preso a um controlador, que no futuro vai acabar ficando distante deste objetivo inicial.


0
Kico bom dia,

Mais o meu problema é o redirecionamento, eu preciso que uma ação redirecione para a mesma página na qual foi invocada.

Hoje eu estou passando a view de destino como parâmetro, mais não achei essa solução muito elegante.

Exemplo:

pagina1.gsp
pagina2.gsp

A pagina1.gsp chama uma ação no controllerA, acao1(). Quero que esse método seja executado e volte para pagina1.gsp.

A mesma coisa se eu chamar o mesmo método da pagina2. Execute o método e continue na pagina2.

O problema seria apenas esse redirecionamento que gostaria que fosse de forma genérica.

render(view: "??????")

No JSF eu faria assim

public String metodo(){
return null;
}

Então, como não tem retorno, o sistema continua na mesma página. Queria fazer isso em Grails.

Agradeço desde já.


0
Olá, Weksley.

bem, no Grails tudo gira em torno das Convenções (CoC).

Se você cria um método acao1() no controller, ele vai redirecionar a respostar por padrão para acai1.gsp. Isso é a convenção para evitar que se mapeie coisas obvias.

Agora, quando se quer algo personalizado, que é o caso descrito por você, acho que assim resolve:
def acao1 = {
// teus códigos e tal
render(view:'pagina1')
}


Agora, se quiser que todas as ações de determinado controller sempre redirecionem para a mesma página, sugiro usar o esquema de mapeamento de URLs do Grails em http://grails.org/doc/latest/guide/theWebLayer.html#urlmappings

Espero ter ajudado


0
Obrigado pela explicações Yoshiriro,

Eu resolvi o problema, mas como em Grails tudo é muito fácil, eu fico sempre achando que tem uma maneira mais simples de fazer.

O que eu precisava fazer era isso que você demonstrou:

def acao1 = {
// teus códigos e tal
render(view:'pagina1')
}

Só que essa 'pagina1' vai depender de quem chamou a ação, eu passei isso por parâmetro da página que está chamando a ação, se a pagina1.gsp chamou a ação eu passou por parâmetro view=pagina1. Se foi a pagina2.gsp eu passo view=pagina2, não achei muito elegante.

Gostaria de saber se está correto, ou se poderia ser de outra maneira

Agradeço desde já.



0
Que tal...

def acao1 = {
// teus códigos e tal
def destino = params.destino
// ou outra maneira de definir o destino, que será "pagina1", "pagina2", enfim...
render(view:destino)
}


0
Foi isso que fiz, passei por parâmetro a página destino. Achei que poderia haver uma forma diferente, fazendo a analogia com o JSF, passar um null para o retorno, assim ao executar a ação ele redireciona para a página que o chamou.

Era algo similar que achei que fosse possível em Grails.

Mesmo assim agradeço.



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