1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
/*
* Title: VelocityDecoratorServlet
* Description:
*
* This software is published under the terms of the OpenSymphony Software
* License version 1.1, of which a copy has been included with this
* distribution in the LICENSE.txt file.
*/
package com.opensymphony.module.sitemesh.velocity;
import com.opensymphony.module.sitemesh.*;
import com.opensymphony.module.sitemesh.util.OutputConverter;
import org.apache.velocity.Template;
import org.apache.velocity.context.Context;
import org.apache.velocity.tools.view.servlet.VelocityViewServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.StringWriter;
import java.io.IOException;
/**
* Servlet that allows Velocity templates to be used as decorators.
*
* @author <a href="mailto:joe@truemesh.com">Joe Walnes</a>
* @version $Revision: 1.9 $
*/
public class VelocityDecoratorServlet extends VelocityViewServlet {
public Template handleRequest(HttpServletRequest request, HttpServletResponse response, Context context) {
HTMLPage htmlPage = (HTMLPage) request.getAttribute(RequestConstants.PAGE);
String template;
context.put("base", request.getContextPath());
// For backwards compatability with apps that used the old VelocityDecoratorServlet
// that extended VelocityServlet instead of VelocityViewServlet
context.put("req", request);
context.put("res", response);
if (htmlPage == null) {
context.put("title", "Title?");
context.put("body", "<p>Body?</p>");
context.put("head", "<!-- head -->");
template = request.getServletPath();
}
else {
context.put("title", OutputConverter.convert(htmlPage.getTitle()));
{
StringWriter buffer = new StringWriter();
try {
htmlPage.writeBody(OutputConverter.getWriter(buffer));
context.put("body", buffer.toString());
} catch (IOException e) {
context.put("body", "<p>Body?</p>");
}
}
{
StringWriter buffer = new StringWriter();
try {
htmlPage.writeHead(OutputConverter.getWriter(buffer));
context.put("head", buffer.toString());
} catch (IOException e) {
context.put("head", "<!-- head -->");
}
}
context.put("page", htmlPage);
DecoratorMapper decoratorMapper = getDecoratorMapper();
Decorator decorator = decoratorMapper.getDecorator(request, htmlPage);
template = decorator.getPage();
}
return getTemplate(template);
}
private DecoratorMapper getDecoratorMapper() {
Factory factory = Factory.getInstance(new Config(getServletConfig()));
DecoratorMapper decoratorMapper = factory.getDecoratorMapper();
return decoratorMapper;
}
}
|