Recently, I use apache velocity for view template in spring framework, and in order to escape the HTML entity, I introduced the “org.apache.velocity.tools.generic.EscapeTool”, however, then I found the variable named with “$application” cannot work now, that any variable named with “$application” shows blank, e.g. “$!application.name”.
When I removed the velocity tool configuration, “$application” can be read correctly. So anyone knows if the “$application” a reserved word in velocity escape tool or I make a mistake when configuration?
Toolbox config:
<toolbox>
<tool>
<key>esc</key>
<scope>application</scope>
<class>org.apache.velocity.tools.generic.EscapeTool</class>
</tool>
</toolbox>
Config in spring-beans XML:
<bean id="viewResolver"
class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
<property name="cache" value="true" />
<property name="exposeSpringMacroHelpers" value="true" />
<property name="toolboxConfigLocation" value="/WEB-INF/toolbox.xml" />
</bean>
In template file:
<div class="description">
<h2>Application Name:$!application.name</h2>
</div>
Thanks in advance!
The EscapeTool does not put anything in the context, so it is not overriding your $application variable. To find out what is overriding any variable, you might try
VelocityTools does automatically return the servletContext when $application is used in a template, but (in the case of Tools 2.0) you can configure whether you want to prefer user-set variables (the default) or the servlet api objects. I don’t offhand recall if that can be configured in Tools 1.4, but i’m sure you can look it up.
In any case, in Tools 2.x, it is not reserved, but it is also does come with a default value. Since it is acting as those it’s reserved, i’m guessing you either turned off userOverwrite or else are using Tools 1.4.