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