英文:
Apache Velocity : Verify if all substitutions are made
问题
Sure, here's the translated portion of your text:
"有人能告诉我如何验证速度上下文与模板的匹配吗?基本上,我想要在速度模板中未替换所有变量时引发一些错误。
例如,假设我有一个速度模板,card.vm
card {
type: CREDIT
company: VISA
name: "${firstName} ${lastName}"
}
替换如下进行:
VelocityEngine velocityEngine = new VelocityEngine();
velocityEngine.init();
Template t = velocityEngine.getTemplate("card.vm");
VelocityContext context = new VelocityContext();
context.put("firstName", "tuk");
StringWriter writer = new StringWriter();
t.merge( context, writer );
在这种情况下,我想引发一些错误,指明lastName
在模板中没有被替换。
速度提供了这方面的功能吗?
- 速度版本 - 1.7"
英文:
Can someone let me know how I can verify a velocity context against a template? Basically, I want to throw some error if all variables are not substituted in the velocity template.
For example, let's say I have a velocity template, card.vm
card {
type: CREDIT
company: VISA
name: "${firstName} ${lastName}"
}
The substitution is done like below
VelocityEngine velocityEngine = new VelocityEngine();
velocityEngine.init();
Template t = velocityEngine.getTemplate("card.vm");
VelocityContext context = new VelocityContext();
context.put("firstName", "tuk");
StringWriter writer = new StringWriter();
t.merge( context, writer );
In this case, I want to throw some error specifying that lastName
is not replaced in template.
Does velocity provide anything for this?
- Velocity Version - 1.7
答案1
得分: 0
这在 velocity 邮件列表 中已经得到了解答。
> 不,但这很容易做到。不要使用基本的VelocityContext
,而是将其封装在一个自定义的上下文中,类似于这样:
> public class WarningVelocityContext
> extends VelocityContext
> {
> public Object get(String key) {
> Object o = super.get(key);
>
> if(null == o) {
> throw new IllegalStateException("Key {" + key + "} has not
> been set");
> }
> }
> }
> 然后在代码中,在合并之前将上下文封装起来:
> t.merge(new WarningVelocityContext(context), writer);
> 请注意,这将对任何找不到的 任何 东西抛出异常,无论出于什么原因。如果你尝试这样做:
> $someObject.method()
> 并且 "someObject" 是 null,那么你会得到一个错误。可能很难区分你"关心的"事物和你不关心的事物之间的区别。如果你有一个简单的用例,那么这可能会起作用。
英文:
This has been answered in velocity mailing list
> No, but it would be easy to do. Instead of using the basic
> VelocityContext
, wrap it in a custom one, something like this:
>
> public class WarningVelocityContext
> extends VelocityContext
> {
> public Object get(String key) {
> Object o = super.get(key);
>
> if(null == o) {
> throw new IllegalStateException("Key {" + key + "} has not
> been set");
> }
> }
> }
>
> Then in your code, wrap the context right before merging:
>
> t.merge(new WarningVelocityContext(context), writer);
>
> Note that this will throw exceptions for anything that's not found
> for any reason. If you try something like:
>
> $someObject.method()
>
> And "someObject" is null, then you'll get an error. It may be
> difficult to tell the difference between the things you "care about"
> and the things you do not. If you have a simple use-case, then
> probably this will work.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论