是“应用程序”是EscapeTool中的保留字吗?

时间:2012-01-12 02:22:02

标签: apache spring velocity

最近,我在spring框架中使用apache velocity作为视图模板,为了逃避HTML实体,我引入了" org.apache.velocity.tools.generic.EscapeTool"然而,然后,我找到了以" $ application"命名的变量。现在无法工作,任何用" $ application"命名的变量显示空白,例如"!$ application.name"

当我删除速度工具配置时," $ application"可以正确阅读。所以任何人都知道" $应用程序"速度转义工具中的保留字,或者我在配置时出错?

工具箱配置:

<toolbox>
  <tool>
    <key>esc</key>
    <scope>application</scope>
    <class>org.apache.velocity.tools.generic.EscapeTool</class>
  </tool>
</toolbox>

配置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>

在模板文件中:

<div class="description">
  <h2>Application Name:$!application.name</h2>
</div>

提前致谢!

1 个答案:

答案 0 :(得分:1)

EscapeTool不会在上下文中放置任何内容,因此它不会覆盖您的$ application变量。要找出覆盖任何变量的内容,您可以尝试

$application.class.name

当在模板中使用$ application时,VelocityTools会自动返回servletContext,但是(在Tools 2.0的情况下),您可以配置是否要更喜欢用户设置变量(默认值)或servlet api对象。我不会随便回想一下是否可以在工具1.4中配置它,但我确定你可以查找它。

在任何情况下,在Tools 2.x中,它都不是保留的,但它也带有默认值。由于它是作为它保留的那些,我猜你要么关闭userOverwrite,要么使用工具1.4。