WebWork e Velocity

6 respostas
M

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 ?

6 Respostas

Jair_Rillo_Junior

é 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

Lucas_Teixeira

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.

M

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.

ManchesteR:
é 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

Lucas_Teixeira

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

M

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.

_fs

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
Criado 14 de junho de 2005
Ultima resposta 15 de jun. de 2005
Respostas 6
Participantes 4