Share

FreeMarker

Tracker: Bugs

5 Custom template loader in Freemarker Servlet - ID: 1892546
Last Update: Comment added ( ddekany )

I want my own template loader for FreemarkerServlet. So I need to override
"factory creation" method. I've attached a diff for this.

How to use it:
1) extend FreemarkerServlet:
-----------------------------------------------
public class CMSFreemarkerServlet extends FreemarkerServlet {

protected void processTemplatePath(String templatePath) throws
IOException {
if (templatePath.startsWith("custom")) {
Configuration cfg = getConfiguration();
cfg.setTemplateLoader(new CMSSnippetLoader());
}
else {
super.processTemplatePath(templatePath);
}
}



class CMSSnippetLoader implements TemplateLoader {


public Object findTemplateSource(String name) throws IOException {
// HERE YOU CAN LOAD YOUR TEMPLATE
String snippetName = name.replace(".snippet", "");
return findSnippetByName(snippetName);
}

public long getLastModified(Object templateSource) {
return System.currentTimeMillis();
}

public Reader getReader(Object templateSource, String encoding)
throws IOException {
return new StringReader(((Snippet)templateSource).getValue());
}

public void closeTemplateSource(Object templateSource) throws
IOException {
}
}

}
---------------------------------------


2) in web.xml:
---------------------------------------
<servlet>
<servlet-name>freemarker</servlet-name>
<servlet-class>CMSFreemarkerServlet</servlet-class>

<!-- FreemarkerServlet settings: -->
<init-param>
<param-name>TemplatePath</param-name>
<param-value>custom</param-value>
</init-param>
<!-- other stuff -->
</servlet>

<servlet-mapping>
<servlet-name>freemarker</servlet-name>
<url-pattern>*.snippet</url-pattern>
</servlet-mapping>
-------------------------------------

3) Now you can include snippet:
-------------------------------------
RequestDispatcher disp =
request.getRequestDispatcher("coolsnippet.snippet");
disp.include(request, response);
-------------------------------------


Nobody/Anonymous ( nobody ) - 2008-02-13 09:41

5

Closed

Fixed

Attila Szegedi

Loading and caching

None

Public


Comments ( 3 )




Date: 2008-05-08 13:54
Sender: ddekanyProject Admin


Fix released with 2.3.13.


Date: 2008-04-28 19:01
Sender: nobody

Logged In: NO

it's up to you how to name methods :)
i'd just like to see this patch in next freemarker version, 'cause I use
the patch in my cms


Date: 2008-03-04 11:52
Sender: szegediaProject AdminAccepting Donations


I've looked at your patch, but I rather opted for adding a "TemplateLoader
createTemplateLoader()" method instead, as it conveys the intent more
clearly.


Log in to comment.

Attached File ( 1 )

Filename Description Download
custom_template_loader.patch patch for freemarker 2.3.11 Download

Changes ( 5 )

Field Old Value Date By
status_id Open 2008-05-08 13:54 ddekany
close_date - 2008-05-08 13:54 ddekany
resolution_id None 2008-03-04 11:52 szegedia
assigned_to nobody 2008-03-04 11:52 szegedia
File Added 266138: custom_template_loader.patch 2008-02-13 09:41 nobody