From 68cb702dc8b13eb0e948a59cc3e274206019c642 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Wed, 23 Aug 2017 09:23:23 +0200 Subject: [PATCH] WW-4838 Allows define incompatible improvements as an init-param --- .../views/freemarker/FreemarkerManager.java | 18 ++++++++++++++++-- .../views/freemarker/StrutsBeanWrapper.java | 4 +++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java index b1010c39a..22a66e544 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java @@ -314,7 +314,9 @@ public class FreemarkerManager { * @throws TemplateException in case of errors during creating the configuration */ protected Configuration createConfiguration(ServletContext servletContext) throws TemplateException { - Configuration configuration = new Configuration(Configuration.VERSION_2_3_0); + Version incompatibleImprovements = getFreemarkerVersion(servletContext); + + Configuration configuration = new Configuration(incompatibleImprovements); configuration.setTemplateExceptionHandler(TemplateExceptionHandler.HTML_DEBUG_HANDLER); @@ -340,6 +342,17 @@ public class FreemarkerManager { return configuration; } + protected Version getFreemarkerVersion(ServletContext servletContext) { + Version incompatibleImprovements = Configuration.VERSION_2_3_0; + + String incompatibleImprovementsParam = servletContext.getInitParameter("freemarker." + Configuration.INCOMPATIBLE_IMPROVEMENTS_KEY_SNAKE_CASE); + if (incompatibleImprovementsParam != null) { + incompatibleImprovements = new Version(incompatibleImprovementsParam); + } + + return incompatibleImprovements; + } + protected ScopesHashModel buildScopesHashModel(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response, ObjectWrapper wrapper, ValueStack stack) { ScopesHashModel model = new ScopesHashModel(wrapper, servletContext, request, stack); @@ -396,7 +409,8 @@ public class FreemarkerManager { } protected ObjectWrapper createObjectWrapper(ServletContext servletContext) { - StrutsBeanWrapper wrapper = new StrutsBeanWrapper(altMapWrapper); + Version incompatibleImprovements = getFreemarkerVersion(servletContext); + StrutsBeanWrapper wrapper = new StrutsBeanWrapper(altMapWrapper, incompatibleImprovements); wrapper.setUseCache(cacheBeanWrapper); return wrapper; } diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/StrutsBeanWrapper.java b/core/src/main/java/org/apache/struts2/views/freemarker/StrutsBeanWrapper.java index ad1222fbb..c9e7eed41 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/StrutsBeanWrapper.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/StrutsBeanWrapper.java @@ -33,6 +33,7 @@ import freemarker.template.SimpleSequence; import freemarker.template.TemplateCollectionModel; import freemarker.template.TemplateHashModelEx; import freemarker.template.TemplateModel; +import freemarker.template.Version; /** * @@ -53,7 +54,8 @@ import freemarker.template.TemplateModel; public class StrutsBeanWrapper extends BeansWrapper { private boolean altMapWrapper; - public StrutsBeanWrapper(boolean altMapWrapper) { + public StrutsBeanWrapper(boolean altMapWrapper, Version incompatibleImprovements) { + super(incompatibleImprovements); this.altMapWrapper = altMapWrapper; }