Como referência um grails SPG modelo de variável indiretamente e.g.a via .obter(...)
Pergunta
Eu estou usando uma SPG para envio de e-mails baseado no MailService plug-in.O sendMail fechamento passa (entre outros) body(view:..., model:myModel)
Eu sei que eu posso acessar cada item do myModel Mapa usando apenas ${itemName}
no SPG.No entanto, como eu, às vezes, quer para criar o nome do item dinamicamente como 'item'+i
, Eu preciso ter alguns torno método para acessar a variável.
Eu já tentei ${model.get('item'+i)
, e ${params.get('item'+i)
, mas o modelo é nulo e params é um Mapa vazio.Eu também tentei pageScope, mas, embora eu possa acessar um item através de ${pageScope.itemName
, Eu não posso usar ${pageScope.get('item'+i)}
porque pageScope não é um Mapa.
Provavelmente existem várias soluções para resolver este;Eu ficaria feliz com um fácil ;-).Uma solução que eu vejo é passar myModel como o único parâmetro e, em seguida, use sempre myModel.get(...)
, no entanto , isso significaria que eu tive que alterar todos os meus existente GSPs para sempre se referem a myModel em vez de aceder a itens (fixa, com nomes) diretamente;então, se há um caminho onde eu não tenho que mudar o modelo passou para o GSP, esta seria a minha favorita.
Se alguém também poderia dizer algumas palavras sobre a diferença do modelo e parâmetros neste contexto, este seria além disso útil!
Solução
Eu consegui agora usando ${pageScope.getProperty(...)}
.
Outras dicas
Não há nenhum "modelo" de escopo ou variável.Em vez de objetos no modelo de mapa de são definidos como atributos de Solicitação para torná-los disponíveis para o GSP.Esta é uma Primavera recurso que facilita o acesso a variáveis em JSPs usando JSTL e desde que o GSP sintaxe é muito semelhante ao JSTL ele funciona da mesma maneira em Grails.
Então você pode usar esse:
${request.getAttribute('item'+i)}
para acessar variáveis do modelo utilizando dinâmica de nomes.
Você pode usar ${fieldValue(bean: book, field: 'title')}
Ver: http://grails.github.io/grails-doc/latest/ref/tags/fieldValue.html