2013-02-21 4 views
1

Это довольно простая проблема, и я уверен, что делаю что-то неправильно или делаю некоторые предположения. Вот оно.Как распечатать список объектов в шаблоне Velocity?

Я пишу плагин Jira, в котором используется система шаблонов Velocity. У меня есть список объектов ResultRow где ResultRow представляет собой класс с одной переменной члена: String ключ:

public class ResultRow { 
    public String key; 
} 

У меня есть список этих ResultRows:

List<ResultRow> rows = new ArrayList<ResultRow>(); 

ResultRow row = new ResultRow(); 
row.key = "foo"; 

rows.add(foo); 

Map<String, Object> velocityParams = new HashMap<String, Object>(); 
velocityParams.put("rows", rows); 

return descriptor.getHtml("view", velocityParams); 

и я пытаюсь перечислить их строки в шаблоне со следующим:

#foreach ($row in $rows) 
    <tr><td>$row.key</td></tr> 
#end 

Я хочу, чтобы выход был: foo. Безумно, система шаблонов просто печатает буквальную строку «$ row.key» вместо содержимого ключа. Для того, чтобы убедиться в том, что «$ строка» действительно является объектом, я использовал шаблон:

#foreach ($row in $rows) 
    <tr><td>$row</td></tr> 
#end 

и результат был, как и ожидалось: [email protected]

Думаю, может быть, мне не хватает некоторых требований к классу. Нужно ли каким-то особым образом определять скорость, чтобы некоторые члены могли использоваться в шаблонах? Использует ли Jira специальную фанк-версию Velocity, которая работает только с определенными объектами?

ответ

0

Velocity не выставляет поля, только методы. Есть способы изменить это:

  • Вы можете создать свой собственный класс Uberspect, который позволит получить доступ к публичным полям.

  • Вы можете обернуть экземпляр с помощью модифицированной версии FieldMethodizer Velocity, которая дает доступ к нестатическим полям.

  • Вы можете добавить и использовать экземпляр класса «инструмент» в свой контекст, например подкласс класса VelocityTool ClassTool.

1

Думаю, ответ заключается в том, что вы не можете делать то, что я пытаюсь сделать. You может методы вызова, но вы не можете получить доступ к переменным-членам, а это означает, что вам нужно будет добавить геттеры к вашему классу. (Может быть, поклялся, что я попробовал это. Хорошо.)

Смежные вопросы