@SuppressWarnings("deprecation") public String render(String templatePath, Map<String, Object> templateArgs) // , // boolean // usePublicFields) { logger.debug("trying to render " + templatePath); try { // keep configuration in session so we can reuse it if (conf == null) { logger.debug("create freemarker config"); // create configuration conf = new freemarker.template.Configuration(); conf.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); List<TemplateLoader> loaders = new ArrayList<TemplateLoader>(); // create template loader // load templates from MOLGENIS loaders.add(new ClassTemplateLoader(MolgenisOriginalStyle.class, "")); // load templates from plugins, can be anywere // (nb this method is deprecated but I can't see why) loaders.add(new ClassTemplateLoader()); for (Entry<String, Object> entry : templateArgs.entrySet()) { Object value = entry.getValue(); if (entry.getKey() != null && entry.getKey().equals("model") && value != null) { loaders.add(new ClassTemplateLoader(value.getClass())); // also add superclass because of generated code loaders.add(new ClassTemplateLoader(value.getClass().getSuperclass())); } } loaders.add(new FileTemplateLoader()); loaders.add(new FileTemplateLoader(new File("/"))); // ClassTemplateLoader loader1 = new ClassTemplateLoader( // Object.class, ""); // ClassTemplateLoader loader2 = new ClassTemplateLoader( // getClass().getSuperclass(), ""); MultiTemplateLoader mLoader = new MultiTemplateLoader(loaders.toArray(new TemplateLoader[loaders.size()])); conf.setTemplateLoader(mLoader); logger.debug("created freemarker config"); } // merge template conf.addAutoInclude("ScreenViewHelper.ftl"); WidgetFactory.configure(conf); Template template = conf.getTemplate(templatePath); StringWriter writer = new StringWriter(); template.process(templateArgs, writer); writer.close(); return writer.toString(); } catch (TemplateException e) { logger.error("rendering of template " + templatePath + " failed:"); e.printStackTrace(); StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw, true); e.printStackTrace(pw); pw.flush(); sw.flush(); return sw.toString().replace("\n", "<br/>"); } catch (IOException e) { logger.error("rendering of template " + templatePath + " failed:"); e.printStackTrace(); StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw, true); e.printStackTrace(pw); pw.flush(); sw.flush(); return sw.toString().replace("\n", "<br/>"); } }