Почему 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")