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
60
61 public class JspTemplateViewRenderer extends JspTemplateRenderer implements ServletContextAware, MessageSourceAware, InitializingBean {
62
63 private static final boolean jstlPresent = ClassUtils.isPresent(
64 "javax.servlet.jsp.jstl.core.Config", ParagraphViewResolver.class.getClassLoader());
65
66 private ServletContext servletContext;
67 private MessageSource messageSource;
68
69 @Override
70 protected String determineTemplatePath(Content content, RenderableDefinition definition, RenderingModel model, String actionResult) {
71 return RenderContext.get().getTemplatePath();
72 }
73
74 @Override
75 protected void setupContext(Map ctx, Content content, RenderableDefinition definition, RenderingModel model, Object actionResult) {
76 super.setupContext(ctx, content, definition, model, actionResult);
77 ctx.putAll(RenderContext.get().getModel());
78 }
79
80 @Override
81 protected void onRender(Content content, RenderableDefinition definition, Writer out, Map ctx, String templatePath) throws RenderException {
82
83 if (jstlPresent) {
84 HttpServletRequest request = MgnlContext.getWebContext().getRequest();
85 if (this.messageSource != null) {
86 JstlUtils.exposeLocalizationContext(request, this.messageSource);
87 } else {
88 JstlUtils.exposeLocalizationContext(new RequestContext(request, servletContext));
89 }
90 }
91
92 super.onRender(content, definition, out, ctx, templatePath);
93 }
94
95 public void setServletContext(ServletContext servletContext) {
96 this.servletContext = servletContext;
97 }
98
99 public void setMessageSource(MessageSource messageSource) {
100 this.messageSource = messageSource;
101 }
102
103 public void afterPropertiesSet() throws Exception {
104 if (jstlPresent && this.messageSource != null) {
105 this.messageSource = JstlUtils.getJstlAwareMessageSource(servletContext, this.messageSource);
106 }
107 }
108 }