Velocidade: $ display.list () e uma coleção de objetos
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.
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.