Debraj,
On 6/13/23 05:38, Debraj Manna wrote:
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?
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.
-chris
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org
For additional commands, e-mail: user-h...@velocity.apache.org