1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.springframework.extensions.surf.mvc;
20
21 import java.util.Map;
22
23 import javax.servlet.http.HttpServletRequest;
24 import javax.servlet.http.HttpServletResponse;
25
26 import org.apache.commons.logging.Log;
27 import org.apache.commons.logging.LogFactory;
28 import org.springframework.extensions.surf.FrameworkUtil;
29 import org.springframework.extensions.surf.PageMapper;
30 import org.springframework.extensions.surf.PageMapperFactory;
31 import org.springframework.extensions.surf.RequestContext;
32 import org.springframework.extensions.surf.WebFrameworkConstants;
33 import org.springframework.extensions.surf.WebFrameworkServiceRegistry;
34 import org.springframework.extensions.surf.exception.PageMapperException;
35 import org.springframework.extensions.surf.exception.RendererExecutionException;
36 import org.springframework.extensions.surf.exception.RequestDispatchException;
37 import org.springframework.extensions.surf.render.PresentationUtil;
38 import org.springframework.extensions.surf.render.RenderContext;
39 import org.springframework.extensions.surf.render.RenderFocus;
40 import org.springframework.extensions.surf.types.TemplateInstance;
41 import org.springframework.extensions.webscripts.ProcessorModelHelper;
42 import org.springframework.extensions.webscripts.URLHelper;
43 import org.springframework.web.util.WebUtils;
44
45
46
47
48
49
50 public class ErrorHandlerPageView extends AbstractWebFrameworkView
51 {
52 private static Log logger = LogFactory.getLog(ErrorHandlerPageView.class);
53
54 public ErrorHandlerPageView(WebFrameworkServiceRegistry serviceRegistry)
55 {
56 super(serviceRegistry);
57 }
58
59
60
61
62 protected void renderMergedOutputModel(
63 Map model, HttpServletRequest request, HttpServletResponse response) throws Exception
64 {
65
66 RequestContext context = (RequestContext) FrameworkUtil.getCurrentRequestContext();
67
68
69 String errorHandlerPageId = this.getUrl();
70
71
72 setupRequestContext(context, model);
73
74
75 exposeModelAsRequestAttributes(model, request);
76
77
78 if (context.getValue(ProcessorModelHelper.MODEL_URL) == null)
79 {
80
81 URLHelper urlHelper = new URLHelper(context.getRequest());
82 context.setValue(ProcessorModelHelper.MODEL_URL, urlHelper);
83 }
84
85
86 RenderContext renderContext = getRenderService().provideRenderContext(context, request, response);
87
88
89 try
90 {
91 FrameworkUtil.getServiceRegistry().getRenderService().renderErrorHandlerPage(renderContext, errorHandlerPageId);
92 }
93 catch (Throwable t)
94 {
95
96 FrameworkUtil.logFullStacktrace(t);
97 }
98 finally
99 {
100
101 context.release();
102 }
103 }
104
105
106
107
108
109
110 protected void exposeForwardRequestAttributes(HttpServletRequest request) {
111 WebUtils.exposeForwardRequestAttributes(request);
112 }
113
114
115
116
117 public void dispatchTemplate(RenderContext context)
118 throws RequestDispatchException
119 {
120 TemplateInstance templateInstance = context.getTemplate();
121 if (templateInstance != null)
122 {
123
124 PresentationUtil.renderContent(context, RenderFocus.BODY);
125 }
126 else
127 {
128
129
130 try
131 {
132 getRenderService().renderSystemPage(context,
133 WebFrameworkConstants.SYSTEM_PAGE_CONTENT_ASSOCIATION_MISSING);
134 }
135 catch (RendererExecutionException ree)
136 {
137 throw new RequestDispatchException(ree);
138 }
139 }
140 }
141
142
143
144
145
146
147
148
149
150 public void setupRequestContext(RequestContext context, Map model)
151 throws PageMapperException
152 {
153
154 context.setViewModel(model);
155
156
157
158 PageMapperFactory factory = this.getServiceRegistry().getPageMapperFactory();
159 PageMapper pageMapper = factory.newInstance();
160 pageMapper.execute(context, (HttpServletRequest) context.getRequest());
161 }
162
163 }