为什么 Apache Velocity 无法处理多个点键
Why Apache Velocity cannot handle multiple dot keys
我在使用 Apache Velocity 1.7 时没有得到这个。
当我有这样的虚拟机时
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");
不确定为什么有多个“.”在上下文键中导致此错误。
有什么提示可以解决这个问题吗?
点用作 属性 访问器。当 Velocity 看到 $db.customer.environment.db_url
时,它将尝试从 db
键下的上下文中获取一个对象,然后尝试对其调用 getCustomer()
或 get("customer")
,依此类推。
因此,对于 Velocity,在键中使用点是一个非常糟糕的主意 - 然而,有一些解决方法。
你需要把上下文放在自己身上,比如:
context.put("context", context);
然后在您的模板中您将能够执行以下操作:
$context.get("db.customer.environment.db_url")
我在使用 Apache Velocity 1.7 时没有得到这个。 当我有这样的虚拟机时
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");
不确定为什么有多个“.”在上下文键中导致此错误。 有什么提示可以解决这个问题吗?
点用作 属性 访问器。当 Velocity 看到 $db.customer.environment.db_url
时,它将尝试从 db
键下的上下文中获取一个对象,然后尝试对其调用 getCustomer()
或 get("customer")
,依此类推。
因此,对于 Velocity,在键中使用点是一个非常糟糕的主意 - 然而,有一些解决方法。
你需要把上下文放在自己身上,比如:
context.put("context", context);
然后在您的模板中您将能够执行以下操作:
$context.get("db.customer.environment.db_url")