VTL оценить или определить ссылку на объект - PullRequest
1 голос
/ 12 октября 2010

Я хотел бы создать макрос, который принимает строку в качестве параметра и оценивает ее для объекта. Что-то вроде:

#macro( valueTest $objRef)
  #define( $obj )#evaluate("$${objRef}")#end
  $obj.foo ## This would have to be translated to $obj.getFoo()
#end

К сожалению, переменная $ obj не указывает на ссылку на объект, которую можно использовать для вызова методов. $ obj является строкой, а $ obj.foo не пытается выполнить getFoo.

Почему-то у меня такое ощущение, что это характер оценки, и я не могу делать то, что хочу.

причина, по которой я хочу сделать что-то подобное, заключается в том, что у нас довольно мало макросов, которые принимают как путь привязки команды, так и саму команду в качестве параметра, и я надеюсь, что последний может быть получен из первого.

1 Ответ

0 голосов
/ 21 октября 2010
Unfortunately, Velocity does not have a mechanism to define functions which return object references.  Macros are really intended to be a shortcut to display text.

В подобных случаях способ продолжения состоит в том, чтобы создать «инструмент» в Java и поместить экземпляр в контекст. Инструмент - это обычный класс с методом, который возвращает то, что вы ищете

, например

создайте объект с помощью метода "eval", затем поместите его в контекст как "referenceEvaluator".

#set($obj = $referenceEvaluator.eval($objRef))

Вы можете обнаружить, что ваш код более понятен, если вы избегаете двойной оценки и просто вставляете объект в контекст с именем $ obj, который делает то, что вы хотите. (лучшая производительность тоже).

...