在改造原有系统的过程中,想要配置spring下的velocity,原配置如下:
<bean id="velocityConfig"
class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath" value="/WEB-INF/view/" />
<property name="configLocation" value="/WEB-INF/classes/velocity.properties" />
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
<property name="cache" value="false" />
<property name="prefix" value="" />
<property name="suffix" value=".vm" />
<property name="toolboxConfigLocation" value="/WEB-INF/classes/toolbox.xml" />
<property name="contentType" value="text/html;charset=utf-8" />
<property name="exposeSpringMacroHelpers" value="true"></property>
</bean>
<!-- action -->
<bean id="joblist" class="com.taiji.eap.components.scheduler.JobList_view" />
在veloctiy.properties中配置
# 设置读取模板文件的解码格式,为了支持中文
input.encoding=utf-8
# 配置输出视图文件的解码格式,为了支持中文
output.encoding=utf-8
结果在启动时总是报一个错:
ERROR [main] app.VelocityEngine - org.apache.velocity.exception.ParseErrorException: Template.process : Unsupported input encoding : utf-8 for template org/springframework/web/servlet/view/velocity/spring.vm
结果造成:
Error creating bean with name 'velocityConfig' defined in ServletContext resource [/WEB-INF/classes/eap-servlet-admin.xml]: Invocation of init method failed; nested exception is org.apache.velocity.exception.VelocityException: Velocimacro : Error using VM library : org/springframework/web/servlet/view/velocity/spring.vm
改了很多地方,可是一想,已经在velocity.properites中加了utf-8,为什么不行,把这个去掉后,不报错了,但vm页面上就必须用标记来代,不能写中文了。最后,改写成这样:
<bean id="velocityConfig"
class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath" value="/WEB-INF/view/" />
<property name="configLocation" value="/WEB-INF/classes/velocity.properties" />
<!-- 这里太有意思了,因为什么不知道,但要重新再设一下input.encoding就行了 -->
<property name="velocityProperties">
<props>
<prop key="input.encoding">UTF-8</prop>
<prop key="output.encoding">UTF-8</prop>
</props>
</property>
</bean>
就行了,为什么要再设一次呢?我只能推测加载spring.vm用的属性不是在加载velocity.properites里用的属性。
因为查了很多网上资料都没什么结果,这里记一下,如有人有此问题,也好有个结论。