Alterar comportamento do scaffold dinamico
09/11/2012 00:33
1
É possível alterar o comportamento que o Grails aplica aos controllers que usam scaffold dinamico?

Por exemplo, no meu caso gostaria que após salvar um objeto, o navegador fosse direcionado para a action "list" e não "show", mas não gostaria de aplicar isso manualmente em cada classe
Tags: scaffold


0
Você pode instalar os templates e alterar neles.
Ai quando gerar, ele já irá gerar no padrão que você quiser.

Eu fiz isso com o twitter bootstrap, eu baixei os templates, modifiquei para o bootstrap e fiz umas alterações que eu queria também, ai todo comando "generate all" que eu faço, sai do jeito que eu preciso.

http://grails.org/doc/latest/ref/Command%20Line/install-templates.html
09/11/2012 01:13


0
Obrigado pela resposta, mas o que eu gostaria é de alterar o comportamento do scaffold dinamico, ou seja, considere este controller:

class FuncionarioController {
static scaffold = true
}


Fazendo isso o próprio Grails irá injetar uma série de actions no controller, mas eu gostaria que estas actions seguissem um padrão levemente diferente do normal.

Assim o controller não ficaria poluído


0
Oi Magno, desconfio que isto vai te dar um trabalhinho a mais viu. Se for pra alterar quais as actions que são inseridas no seu controlador, provávelmente você terá que alterar algum componente básico do próprio framework Grails.

O que eu sei que da pra fazer é que você pode sobrescrever as actions que seriam inseridas pelo scaffolding. Por exemplo, no código abaixo


class FuncionarioController {
def list = {
}
static scaffold = true
}


A sua action list é mantida.


0
Entendo.
Estava na esperança de que isso já poderia ser previsto no Grails e eu poderia talvez declarar alguma classe seguindo algum padrão e o Grails iria considerar a implementação dela (ao invés da sua própria) ao aplicar o scaffold

De qualquer forma obrigado pelas respostas!


0
Ola Magno,

cara infelizmente eu nao sei como fazer isso que vc esta querendo, mas vou dar uma sugestão de como vc conseguir comportamentos desejados sem o "trabalhoso" modo de alterar o scafold. Se você perceber todos os controllers gerados pelo scafold com o comando generate-all ou generate-controller possuem a mesma estrutura mudando apenas as variáveis do domínio.

Assim, se vc mantivesse um modelo arquivo (TXT mesmo) e mandasse localizar e substituir as instancias do controller com o comportamento desejado para as variaveis de dominio que vc quer implementar, conseguiria o mesmo resultado com menos trabalho.

Em exemplo, digamos que vc possua o domínio TIPO com o comportamento desejado e vc mandasse desse o generate-all do mesmo gerando o controller.
def show(Long id) {
def tipoInstance = Tipo.get(id)
if (!tipoInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'tipo.label', default: 'Tipo'), id])
redirect(action: "list")
return
}

[tipoInstance: tipoInstance]
}

Assim, todos os métodos possuirão o 'tipoInstance' como instancia do Dominio e o Dominio 'Tipo'. Se vc implementar o comportamento desejado neste dominio e para o próximo dominio que se quer fazer a mesma coisa mandar localizar e substituir (diferenciando maiuscula de minuscula) as variaveis 'tipoInstance', 'Tipo' e 'tipo' para 'dominioInstance', 'Dominio' e 'dominio' vc consegue o mesmo resultado. Daí sempre que desejar é só mandar localizar e substituir uma cópia do controller para o dominio desejado.

Sei que não é o que vc quer implementar, mas o importante é conseguir o mesmo resultado, com o mínimo de trabalho e sem bagunçar o código.

09/11/2012 11:35


1
Opa, estudando os fontes do Grails descobri algo bem interessante.
Ao utilizar o comando install-templates conforme o Carlos Alberto sugeriu, o Grails vai utilizar aqueles templates inclusive no staffold dinamico (Se foi isso que o Carlos Alberto quis sugerir já de cara, peço desculpas por não ter entendido). Eu acreditava que seria utilizado apenas quando eu quisesse gerar o código do scaffold estaticamente.

No meu caso, como preciso apenas personalizar o controller, apaguei todos os templates que ele gera e mantive apenas o src/templates/scaffolding/Controller.groovy

O único problema é que se o template padrão do Grails for modificado em alguma nova versão, eu não vou pegar essa modificação automaticamente, mas dá pra conviver com isso


0
Boa Magno!


0
Magno, eu quis dizer isso mesmo.
Quando você instala ele, o grails faz apenas mudar a origem do scaffold. Em vez de pegar na instalação do grails e vai pegar no seu projeto.
09/11/2012 15:56



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