Это возможно только для обнаружения и зацикливания свойств объекта (то есть свойств с геттерами и / или сеттерами) если , вы можете добавить новый инструмент в свой контекст Velocity.Если вы не можете, вы довольно застряли.
Есть несколько способов сделать это, ниже я покажу, как это сделать с помощью commons-beanutils.
Сначала добавьте Apache commons-beanutils в вашем пути к классам и добавьте его в свой контекст Velocity из Java:
import org.apache.commons.beanutils.PropertyUtils;
...
context.put("beans", new PropertyUtils());
...
Одно замечание: если у вас нет доступа к части Java, но если случайно commons-beanutils уже находится вclasspath, есть один хакский способ получить к нему доступ: #set($beans = $foo.class.forName('org.apache.commons.beanutils.PropertyUtils').newInstance())
.
Тогда, скажем, у меня есть следующий объект:
class Foo
{
public boolean isSomething() { return true; }
public String getName() { return "Nestor"; }
}
, который присутствует в моем контексте под$foo
.Используя ваш недавно $beans
свойства-интроспектор, вы можете сделать:
#set ($properties = $beans.getPropertyDescriptors($foo.class))
#foreach ($property in $properties)
$property.name ($property.propertyType) = $property.readMethod.invoke($foo)
#end
Это приведет к:
bar (boolean) = true
class (class java.lang.Class) = class Foo
name (class java.lang.String) = Robert
(вам нужно отфильтровать свойство class
,конечно)
Последнее замечание.Шаблоны предназначены для кодирования уровня View приложения MVC, и такой общий анализ объектов в них довольно неадекватен на уровне представления.Вы гораздо лучше переносите весь этот код самоанализа на сторону Java.