Hay tres métodos distintos para indicar la ruta donde están los templates en FreeMarker.
Java public void setClassForTemplateLoading(Class clazz, String pathPrefix); public void setDirectoryForTemplateLoading(File dir) throws IOException; public void setServletContextForTemplateLoading(Object servletContext, String path);123 publicvoidsetClassForTemplateLoading(Classclazz,StringpathPrefix);publicvoidsetDirectoryForTemplateLoading(File dir)throwsIOException;publicvoidsetServletContextForTemplateLoading(ObjectservletContext,Stringpath);
El primer método se utiliza para que Freemarker encuentre el template en el paquete donde se encuentra la clase especificada. Por ejemplo:
Java freemarkerConfiguration = new Configuration(); freemarkerConfiguration.setClassForTemplateLoading(this.getClass(), ""); Template freemarkerTemplate = freemarkerConfiguration.getTemplate("template.tpl");123 freemarkerConfiguration=newConfiguration();freemarkerConfigurationsetClassForTemplateLoading(thisgetClass(),"");Template freemarkerTemplate=freemarkerConfigurationgetTemplate("template.tpl");
Como le estamos indicando this.getClass(), es evidente que buscará los templates (plantillas) en el paquete de la clase actual.
El segundo método es probablemente el más utilizado, por ser también el más directo, ya que simplemente hay que indicarle la ruta en la que están los templates (siempre que esta ruta se encuentre dentro del WebApp). Un ejemplo:
Java private static void initTemplate() throws Exception { config = new Configuration(); URL templateURL = NotifyTemplateUtil.class.getResource("/template"); String fileName = templateURL.toURI().getPath(); File file = new File(fileName); config.setDirectoryForTemplateLoading(file); config.getTemplateLoader().findTemplateSource( "sms_template_default.ftl"); }123456789 privatestaticvoidinitTemplate()throwsException{config=newConfiguration();URL templateURL=NotifyTemplateUtilclassgetResource("/template");StringfileName=templateURLtoURI()getPath();File file=newFile(fileName);configsetDirectoryForTemplateLoading(file);configgetTemplateLoader()findTemplateSource("sms_template_default.ftl");}
El tercero es quizás el más complicado, y quizás por eso el menos utilizado, o el utilizado sólo con algún fin muy específico, como motivos de configuración, para llamar directamente a un servlet en programación java tradicional, o para utilizar directamente el contexto de la aplicación. Es difícil encontrar ejemplos para esta opción por su poco uso.