Почему Apache Velocity не может работать с несколькими точечными клавишами

Я не получаю это при использовании Apache Velocity 1.7. Когда у меня есть VM, как это

db.connection.url = $db.customer.environment.db_url

и такой контекст...

VelocityContext context = new VelocityContext();
context.put("db.customer.environment.db_url", "//sample_db_conn");

Я получаю эту ошибку

Вызывается: org.apache.velocity.exception.MethodInvocationException: объект 'java.lang.String' не содержит свойство 'environment' в db.properties.vm[строка 2, столбец 42]

Но если я скажу это так... это работает...

context.put("db.db_url", "//sample_db_conn");

Не уверен, почему иметь несколько "." в контексте ключ вызывает эту ошибку. Любые намеки, как преодолеть это?

1 ответ

Точка используется как средство доступа к свойству. Когда скорость видит $db.customer.environment.db_url, он попытается получить объект из контекста под db ключ, затем попробуйте позвонить getCustomer() или же get("customer") на нем и тд.

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

Вы должны поместить контекст в себя, с чем-то вроде:

context.put("context", context);

и тогда в вашем шаблоне вы сможете сделать:

$context.get("db.customer.environment.db_url")
Другие вопросы по тегам