Prev Next

API / Apache Velocity Interview questions

Which is better for reusable rendering logic: a Velocimacro or a custom Directive class, and why?

A Velocimacro is the lighter-weight, more common choice: it's defined entirely in VTL (or a macro library file), requires no Java compilation step, and is easy for a template author to read, copy, and adjust. It's the right default for the vast majority of reuse cases, labeled fields, repeated card layouts, common formatting wrappers.

A custom Directive, implemented by extending Velocity's Directive class in Java and registering it with the engine, is heavier to build but gives you full programmatic control over parsing and rendering behavior, including things a Velocimacro can't do, like custom parsing of its own arguments or interacting directly with the rendering context's internal writer.

In practice, custom directives are reserved for genuinely low-level, framework-style needs (Struts and Turbine both ship a handful), while nearly everything else is better served by a Velocimacro, since it keeps the logic visible and editable without a Java build.

Which is the more common, lighter-weight choice for reusable rendering logic?
What can a custom Directive class do that a Velocimacro cannot?

More Related questions...

What is Apache Velocity? What are the main features of Apache Velocity? What is Velocity Template Language (VTL)? What file extension do Velocity templates typically use? What is the purpose of the VelocityContext? What are Velocity directives? What are the types of loops available in Velocity? How do you use variable references in Velocity templates? How do you apply conditional logic in a Velocity template? Define the #set directive in Velocity? Describe the role of the VelocityEngine class? List the comment syntax options available in VTL? Explain the purpose of the #include directive? What is the purpose of the #parse directive? What is a Velocimacro (#macro directive)? What is the purpose of the #stop directive? What is silent/quiet reference notation ($!) used for? How do you use the #break directive? What are formal vs shorthand references in VTL? How do you render array or list elements with #foreach? Why is Velocity described as a "template engine" rather than a full programming language? Why do we use Velocity instead of embedding logic in JSP? Why should you avoid putting business logic inside Velocity templates? Why doesn't Velocity throw an exception by default for an undefined reference? How does Velocity resolve a variable reference at render time? How is Apache Velocity different from Apache FreeMarker? When should you use #parse over #include? When would you choose a Velocimacro over a Java-side helper method? What happens when a referenced property or method doesn't exist on an object in a template? What is the difference between #set($x = $y) and context.put("x", y) in Java code? Which is better for reusable rendering logic: a Velocimacro or a custom Directive class, and why? How can you optimize Velocity template rendering performance? How do you troubleshoot a "parse error" in a VTL template? Explain the lifecycle of a Velocity template from load to render? What is the difference between local and global (library) Velocimacros? What is strict reference mode in Velocity, and how does it differ from the default lenient mode? How does Velocity integrate with the Apache Struts framework? How does Velocity handle null values inside #if conditions and references? What is the RuntimeInstance in Velocity's architecture? What is the role of the ResourceManager and ResourceLoader in Velocity? How do you configure a custom template ResourceLoader in Velocity? What is the difference in templating philosophy between Apache Velocity and Thymeleaf? How do you escape special characters like $ and # in a Velocity template? What are Velocity Tools (VelocityTools) and why would you use them? How do you handle internationalization (i18n) in Velocity templates? Explain the internal working of Velocimacro resolution and invocation? Explain the internal working of the Velocity template parsing process? What security risks are associated with allowing untrusted users to submit Velocity templates? What is the Uberspector in Velocity and what problem does it solve? Why is Apache Velocity often considered a legacy choice for new Java projects today?
Show more question and Answers...


Comments & Discussions