From dbcc75dc20bb5c22321db547fa6f31940ff0d87a Mon Sep 17 00:00:00 2001 From: j2blake Date: Mon, 20 May 2013 13:31:25 -0400 Subject: [PATCH] Fix so widgets can invoke I18N method. --- .../mannlib/vitro/webapp/web/widgets/Widget.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/widgets/Widget.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/widgets/Widget.java index d3e46524d..e7e2741d5 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/widgets/Widget.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/widgets/Widget.java @@ -10,6 +10,7 @@ import java.util.HashMap; import java.util.Map; import javax.servlet.ServletContext; +import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; @@ -107,6 +108,7 @@ public abstract class Widget { private String processMacroToString(Environment env, String widgetName, Macro macro, Map map) { StringWriter out = new StringWriter(); + try { String templateString = macro.getChildNodes().get(0).toString(); // NB Using this method of creating a template from a string does not allow the widget template to import @@ -117,8 +119,16 @@ public abstract class Widget { // the same key, e.g., "widgetTemplate", since one putTemplate() call will clobber a previous one. // We need to give each widget macro template a unique key in the StringTemplateLoader, and check // if it's already there or else add it. Leave this for later. - Template template = new Template("widget", new StringReader(templateString), env.getConfiguration()); - template.process(map, out); + Template template = new Template("widget", new StringReader(templateString), env.getConfiguration()); + + // JB KLUGE The widget is processed in its own environment, which doesn't include these custom attributes. + // JB KLUGE Put them in. + Environment widgetEnv = template.createProcessingEnvironment(map, out); + ServletRequest request = (ServletRequest) env.getCustomAttribute("request"); + widgetEnv.setCustomAttribute("request", request); + widgetEnv.setCustomAttribute("context", env.getCustomAttribute("context")); + widgetEnv.setLocale(request.getLocale()); + widgetEnv.process(); } catch (Exception e) { log.error("Could not process widget " + widgetName, e); }