Pergunta

Velocity DisplayTool tem um método útil:

$display.list($list)

Isso irá formatar uma coleção ou matriz no formulário "A, B e C".

O problema é, digamos que eu tenho um ArrayList de objetos, como faço para a saída de um campo de objeto específico, em vez de todo o objeto? Por exemplo, o ciclo normal ficaria assim:

#foreach($obj in $list)
   ${obj.title}
#end

Por enquanto eu só fiz obj.toString () para retornar obj.title, mas o que se eu vai precisar de outro campo?

Graças.

Atualizar Acabou implementar este método eu mesmo e comprometendo-se a DisplayTools. Por isso, é uma parte do Tools 2.0 agora.

Foi útil?

Solução

Você pode considerar o alargamento do DisplayTool para suportar isto. Dê uma olhada no SortTool, que permite classificar em propriedades. Copiar o código de lá deve dar-lhe um bom começo para adicionar esta a DisplayTool. E se você fizer isso e sentir como partilha, deixe-nos saber mais sobre a lista dev@velocity.apache.org. Heck, se eu estou entediado algum dia, eu poderia fazer isso eu mesmo.

Outras dicas

Assim que você quer acabar com uma string formatada como "title1, title2 e TITLE3", onde cada elemento é a propriedade de título de uma lista de, digamos, Book objetos? Duas abordagens vêm à mente:

1) Construir a lista de títulos se manualmente, em seguida, mão que fora a US $ display.list (). . Por exemplo,:

#set($titles = [])
#foreach($obj in $list)
  $titles.add($obj.title)
#end
$display.list($titles)

2) Criar uma macro Velocity para recuperar uma determinada propriedade de uma lista, chama a macro em sua lista livro com a propriedade de título, então a mão que a US $ display.list (). Ex .:

#macro(retrieveProperty $list $property $newList)
  #foreach($obj in $list)
    $newList.add(${obj.${property}})
  #end
#end

#set($titles = [])
retrieveProperty($list 'title' $titles)
$display.list($titles)

Espero que isso ajude.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top