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 ; 11 import javax.servlet.http.HttpServletResponse ; 12 import java.util.Map ; 13 import java.io.Writer ; 14 import java.io.IOException ; 15 16 public class ViewBoundAdaptingServlet extends BasicAdaptingServlet { 17 private final static Command SessionExpired = new SessionExpired(); 18 private Map views; 19 private SessionDispatcher.Listener.Monitor sessionMonitor; 20 21 public ViewBoundAdaptingServlet(Server server, SessionDispatcher.Listener.Monitor sessionMonitor, Map views) { 22 super(server); 23 this.sessionMonitor = sessionMonitor; 24 this.views = views; 25 } 26 27 public synchronized void service(HttpServletRequest request, HttpServletResponse response) throws Exception { 28 String 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 new ServletRequestResponse(request, response).respondWith(new FixedXMLContentHandler() { 36 public void writeTo(Writer writer) throws IOException { 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 Throwable nestedException = e.getCause(); 48 if (nestedException == null || nestedException instanceof Error ) { 49 throw e; 50 } else { 51 throw (Exception ) nestedException; 52 } 53 } finally { 54 view.release(); 55 } 56 } 57 } 58 } 59 } 60 | Popular Tags |