Bezdepbonusu7Программирование: статьи и ответы

Вопрос

VTL оценивает или определяет ссылку на объект

Автор вопроса: PriitОтветов: 1

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

#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.

Почему-то у меня такое ощущение, что такова природа оценки и невозможно сделать то, что я хочу.

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

spring-mvcvelocity

Ответы

Ответ 1 · Will Glass

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 и поместить экземпляр в контекст. Инструмент - это обычный класс с методом, который возвращает то, что вы ищете.

e.g.

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы