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