Pessoal,
Eu já vi que minhas propriedades usando SETs/GETs da minha action, viram variáveis no contexto do velocity, porém eu gostaria de inserir dados neste contexto do velocity, sem criar SET/GET na minha action, por exemplo, ler o conteúdo de um ArrayList e jogar no contexto, eh possível fazer isto no WebWork ?
WebWork e Velocity
6 Respostas
é possivel sim, mas vc vai ter que fazer um GET e um SET do seu ArrayList…
vou fazer um exemplo aqui, se tiver algum erro, é pq fiz direto no fórum.
Action
ArrayList arrayList = new ArrayList();
//preenche os dados no ArrayList
public void setArrayList(... //SET
public ArrayList getArrayList()....//GET
No velocity, vc pode usar o comando foreach. por exemplo
#foreach ($itens in $arrayList)
$itens.getNome() //exemplo
#end
Isso foi apenas um exemplo, acredito que na documentação do WW e nos tutoriais do GUJ tenha falando mais sobre isso
Se tuas variaveis forem publicas, pode usar o $action para se referir à action q executou, ai você acessa a variavel de forma direta…
Mas que é porquinho, é sim.
Mas é exatamente isto que nao quero fazer, criar SET/GET na minha action, quero criar uma Action generica e as demais estender a esta, onde esta Action vai sempre receber um Map da camada de negocio, assim, nesta action generica gostaria de ler este Map e colocar os valores no contexto do velocity, sem ter q criar SET/GET.
é possivel sim, mas vc vai ter que fazer um GET e um SET do seu ArrayList…
vou fazer um exemplo aqui, se tiver algum erro, é pq fiz direto no fórum.
ActionArrayList arrayList = new ArrayList(); //preenche os dados no ArrayList public void setArrayList(... //SET public ArrayList getArrayList()....//GET
Hum, tenta me explicar o porque de não se ter GET/SET…
Bom, no caso que vc disse, eu criaria um Map em uma Action que fosse super classe de todas minhas outras, e manteria esse map como protected para ficar mais fácil o acesso em todas as subclasses. o GET/SET dele estaria na super classe, então não iria te dificultar ou atrapalhar em nada, e no contexto vc poderia fazer a chamada direta ao objeto ;D
Será que eu tou entendendo onde vc quer chegar ou tou indo para um caminho diferente?
;D
Oi Lucas, é isto mesmo que eu quero, a idéia eh esta mesmo. E eu nao quero usar GET/SET, pq nao quero que nas paginas seja usado o nome do meu Map, ou seja, que fique transparente para quem esta desenvolvendo, o desenvolvedor só vai saber o nome do que ele retornou na camada de negócios, eu já até fiz isto da forma que vc mensionou e usando o Interceptor ModelDriven para tentar deixar transparente para a pagina o nome do Map, mas aparentemente o ModelDriven nao funciona com Map, somente com Classes.
Por isto que estava tentando inserir este Map na mão no contexto do velocity.
Se em sua action há
public Map getMap() {
return meuMapComDados;
}
basta fazer isso na view
<p>$map.get( "chave1" )</p>
<p>$map.get( "chave2" )</p>
ou até
#foreach( $key in $map.keySet() )
<p>$map.get( $key )</p>
#end