KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > icesoft > faces > webapp > http > servlet > ViewBoundAdaptingServlet


1 package com.icesoft.faces.webapp.http.servlet;
2
3 import com.icesoft.faces.webapp.http.common.Server;
4 import com.icesoft.faces.webapp.http.common.Request;
5 import com.icesoft.faces.webapp.http.common.standard.FixedXMLContentHandler;
6 import com.icesoft.faces.webapp.command.Command;
7 import com.icesoft.faces.webapp.command.SessionExpired;
8
9 import javax.faces.FacesException;
10 import javax.servlet.http.HttpServletRequest JavaDoc;
11 import javax.servlet.http.HttpServletResponse JavaDoc;
12 import java.util.Map JavaDoc;
13 import java.io.Writer JavaDoc;
14 import java.io.IOException JavaDoc;
15
16 public class ViewBoundAdaptingServlet extends BasicAdaptingServlet {
17     private final static Command SessionExpired = new SessionExpired();
18     private Map JavaDoc views;
19     private SessionDispatcher.Listener.Monitor sessionMonitor;
20
21     public ViewBoundAdaptingServlet(Server server, SessionDispatcher.Listener.Monitor sessionMonitor, Map JavaDoc views) {
22         super(server);
23         this.sessionMonitor = sessionMonitor;
24         this.views = views;
25     }
26
27     public synchronized void service(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws Exception JavaDoc {
28         String JavaDoc viewNumber = request.getParameter("viewNumber");
29         if (viewNumber == null) {
30             response.sendError(500, "Cannot match view instance. 'viewNumber' parameter is missing.");
31         } else {
32             ServletView view = (ServletView) views.get(viewNumber);
33             if (view == null) {
34                 //todo: revisit this -- maybe the session was not created yet
35
new ServletRequestResponse(request, response).respondWith(new FixedXMLContentHandler() {
36                     public void writeTo(Writer JavaDoc writer) throws IOException JavaDoc {
37                         SessionExpired.serializeTo(writer);
38                     }
39                 });
40             } else {
41                 try {
42                     view.updateOnXMLHttpRequest(request, response);
43                     sessionMonitor.touchSession();
44                     super.service(request, response);
45                 } catch (FacesException e) {
46                     //"workaround" for exceptions zealously captured & wrapped by the JSF implementations
47
Throwable JavaDoc nestedException = e.getCause();
48                     if (nestedException == null || nestedException instanceof Error JavaDoc) {
49                         throw e;
50                     } else {
51                         throw (Exception JavaDoc) nestedException;
52                     }
53                 } finally {
54                     view.release();
55                 }
56             }
57         }
58     }
59 }
60
Popular Tags