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 package info.magnolia.rendering.renderer;
35
36 import info.magnolia.cms.beans.config.MIMEMapping;
37 import info.magnolia.cms.util.ServletUtils;
38 import info.magnolia.context.MgnlContext;
39 import info.magnolia.context.WebContext;
40 import info.magnolia.jcr.util.NodeUtil;
41 import info.magnolia.rendering.context.RenderingContext;
42 import info.magnolia.rendering.engine.RenderException;
43 import info.magnolia.rendering.engine.RenderingEngine;
44 import info.magnolia.rendering.template.RenderableDefinition;
45
46 import java.util.Map;
47
48 import javax.inject.Inject;
49 import javax.jcr.Node;
50 import javax.servlet.http.HttpServletRequest;
51 import javax.servlet.http.HttpServletResponse;
52
53
54
55
56 public class JspRenderer extends AbstractRenderer {
57
58
59
60
61 public JspRenderer() {
62 }
63
64 @Inject
65 public JspRenderer(RenderingEngine renderingEngine) {
66 super(renderingEngine);
67 }
68
69 @Override
70 protected void onRender(Node content, RenderableDefinition definition, RenderingContext renderingCtx, Map<String, Object> ctx, String templateScript) throws RenderException {
71 HttpServletRequest request = MgnlContext.getWebContext().getRequest();
72 HttpServletResponse response = MgnlContext.getWebContext().getResponse();
73 response.setContentType(MIMEMapping.getMIMEType(MIMEMapping.DEFAULT_EXTENSION));
74
75 try {
76 if (response.isCommitted() || (ServletUtils.isForward(request) || ServletUtils.isInclude(request)) || !NodeUtil.isSame(content, renderingCtx.getMainContent())) {
77 ((WebContext) ctx).include(templateScript, renderingCtx.getAppendable());
78 } else {
79
80 request.getRequestDispatcher(templateScript).forward(request, response);
81 }
82 } catch (Exception e) {
83 throw new RenderException("Can't render template " + templateScript, e);
84 }
85 }
86
87
88
89
90
91
92
93
94
95
96
97 @Override
98 protected Map newContext() {
99 return MgnlContext.getWebContext("JspRenderer can only be used with a WebContext");
100 }
101
102 }