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.module.blossom.view;
35
36 import java.util.Map;
37 import javax.jcr.Node;
38 import javax.servlet.ServletContext;
39 import javax.servlet.http.HttpServletRequest;
40
41 import org.springframework.beans.factory.InitializingBean;
42 import org.springframework.context.MessageSource;
43 import org.springframework.context.MessageSourceAware;
44 import org.springframework.util.ClassUtils;
45 import org.springframework.web.context.ServletContextAware;
46 import org.springframework.web.servlet.support.JstlUtils;
47 import org.springframework.web.servlet.support.RequestContext;
48
49 import info.magnolia.context.MgnlContext;
50 import info.magnolia.module.blossom.render.RenderContext;
51 import info.magnolia.rendering.context.RenderingContext;
52 import info.magnolia.rendering.model.RenderingModel;
53 import info.magnolia.rendering.renderer.JspRenderer;
54 import info.magnolia.rendering.template.RenderableDefinition;
55
56
57
58
59
60
61 public class JspTemplateViewRenderer extends JspRenderer implements ServletContextAware, MessageSourceAware, InitializingBean {
62
63 private static final boolean jstlPresent = ClassUtils.isPresent(
64 "javax.servlet.jsp.jstl.core.Config", TemplateViewResolver.class.getClassLoader());
65
66 private ServletContext servletContext;
67 private MessageSource messageSource;
68
69 @Override
70 protected void setupContext(Map<String, Object> ctx, Node content, info.magnolia.rendering.template.RenderableDefinition definition, info.magnolia.rendering.model.RenderingModel<?> model, Object actionResult) {
71 super.setupContext(ctx, content, definition, model, actionResult);
72 ctx.putAll(RenderContext.get().getModel());
73 }
74
75 @Override
76 protected void onRender(Node content, info.magnolia.rendering.template.RenderableDefinition definition, RenderingContext renderingCtx, Map<String, Object> ctx, String templateScript) throws info.magnolia.rendering.engine.RenderException {
77
78 if (jstlPresent) {
79 HttpServletRequest request = MgnlContext.getWebContext().getRequest();
80 if (this.messageSource != null) {
81 JstlUtils.exposeLocalizationContext(request, this.messageSource);
82 } else {
83 JstlUtils.exposeLocalizationContext(new RequestContext(request, servletContext));
84 }
85 }
86
87 super.onRender(content, definition, renderingCtx, ctx, templateScript);
88 }
89
90 @Override
91 protected String resolveTemplateScript(Node content, RenderableDefinition definition, RenderingModel<?> model, String actionResult) {
92 return RenderContext.get().getTemplateScript();
93 }
94
95 @Override
96 public void setServletContext(ServletContext servletContext) {
97 this.servletContext = servletContext;
98 }
99
100 @Override
101 public void setMessageSource(MessageSource messageSource) {
102 this.messageSource = messageSource;
103 }
104
105 @Override
106 public void afterPropertiesSet() throws Exception {
107 if (jstlPresent && this.messageSource != null) {
108 this.messageSource = JstlUtils.getJstlAwareMessageSource(servletContext, this.messageSource);
109 }
110 }
111 }