在 Spring 5.3.9下升級 Velocity 1.7.x 至 velocity2.3 + velocity-tools3.1 出現的問題,記錄中...
spring-webmvc-4.3.9.RELEASE.jar 中 org/springframework/web/servlet/view/velocity 下
VelocityConfig.java
VelocityConfigurer.java
VelocityLayoutView.java
VelocityLayoutViewResolver.java
VelocityToolboxView.java
VelocityView.java
VelocityViewResolver.java
spring.vm
和 spring-context-support-4.3.9.RELEASE.jar中 org/springframework/ui/velocity下
SpringResourceLoader.java
VelocityEngineFactory.java
附上-spring-webMVC源碼地址
https://github.com/spring-projects/spring-framework/tree/4.3.x/spring-webmvc
修改部分源碼
其中VelocityToolboxView.java類中 第40行,
protected Context createVelocityContext(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception { ChainedContext velocityContext = new ChainedContext(new VelocityContext(model), getVelocityEngine(), request, response, getServletContext()); if (getToolboxConfigLocation() != null) { ToolboxManager toolboxManager = ServletToolboxManager.getInstance( getServletContext(), getToolboxConfigLocation()); Map<String, Object> toolboxContext = toolboxManager.getToolbox(velocityContext); //將Map<?, ?>替換成了Map<String, Object>,避免類型轉換錯誤 velocityContext.setToolbox(toolboxContext); } return velocityContext; }
問題1:commons-digester-2.x 升級至 commons-digester3.x
代碼改變
Velocity 1.x -> ViewToolInfo toolinfo = (ViewToolInfo) digester.peek();
Velocity 2.x -> ViewToolInfo toolinfo = (ViewToolInfo) getDigester().peek();
問題2:Apache Commons Lang 2.x 替換為 Apache Commons Lang 3.x
問題3:commons-collections-3.x 替換為 commons-collections-4.x
問題4:$velocityCount失效 替換為 $foreach.count
問題5:configuration key 'resource.loader' has been deprecated in favor of 'resource.loaders'