Как перебрать атрибуты переменной шаблона скорости Apache - PullRequest
0 голосов
/ 12 апреля 2019

Как заголовок, есть ли способ перебирать или отображать атрибуты шаблона скорости Apache?

например, у меня есть следующий код:

<code>
${ctx.messages.headerMessage}
</code>

И я хочу знать, сколько других атрибутов имеет переменная $ {ctx}

1 Ответ

1 голос
/ 15 апреля 2019

Это возможно только для обнаружения и зацикливания свойств объекта (то есть свойств с геттерами и / или сеттерами) если , вы можете добавить новый инструмент в свой контекст 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.

...