Grails: usando invocação dinâmica de métodos

Então você sabe que Groovy possui invocação dinâmica de métodos (já falei sobre isto aqui) mas não faz a menor idéia de como tirar proveito deste recurso, certo? Aqui vai um exemplo.

Imagine a seguinte situação: você possui um controlador responsável por gerar relatórios baseados em um período  que será digitado pelo usuário em uma caixa de texto presente em uma página. Nesta será exposta uma caixa de seleção aonde deverá ser selecionado qual o tipo de relatório a ser exposto e uma caixa de texto aonde digitaremos o período, tal como no código abaixo:


<g:form action="relatorio" controller="controladorQuente">

Relatório: <select name="tipo_relatorio"><option value="vendas">Vendas</option><option value="compras">Compras</option></select>

Período: <input type="text" name="periodo"/>

<input type="submit" value="Gerar relatório"/>

</g:form>

Agora, vamos dar uma olhada no corpo do controlador relacionado:


def relatorio_vendas = {periodo ->
// faz o que tem de fazer
render(template:"/relatorio/vendas", model:[seus dados])
}

def relatorio_compras = {periodo ->

// faz também o que deve fazer

render(template:"/relatorio/compras", model:[seus dados])

}

def  relatorio = {

def periodo = params.periodo

try {

// executo a closure a minha escolha com base no nome

"relatorio_${params.tipo_relatorio}"(periodo)

} catch (MissingMethodException ex) {

render("Ei! Este relatório não existe!")

}

}

Observe a action relatorio. Nela tiro proveito da invocação dinâmica de métodos gerando uma nova string que representará o nome de uma closure interna presente no meu controlador. Estas closures tem acesso aos demais métodos do controlador. Sendo assim, funcionam quase que como uma action convencional.

Repare também que trato excessões do tipo MissingMethodException, que é disparada quando tentamos executar um método que não existe dentro de nossas classes Groovy. Claro, este é um código hiper simples, e serve só pra que você veja como tirar proveito deste recurso que a linguagem Groovy nos fornece.

Agora você sabe pelo menos um uso da invocação dinâmica de métodos. :)

Leave a Reply

Your email address will not be published. Required fields are marked *