1 25 package org.ofbiz.webapp.view; 26 27 import java.io.IOException ; 28 import java.net.URL ; 29 import javax.servlet.ServletContext ; 30 import javax.servlet.ServletException ; 31 import javax.servlet.http.HttpServletRequest ; 32 import javax.servlet.http.HttpServletResponse ; 33 import javax.servlet.jsp.JspException ; 34 35 import org.ofbiz.base.util.Debug; 36 import org.ofbiz.webapp.control.ContextFilter; 37 import org.ofbiz.webapp.region.Region; 38 import org.ofbiz.webapp.region.RegionManager; 39 import org.ofbiz.webapp.region.RegionStack; 40 41 49 public class RegionViewHandler implements ViewHandler { 50 51 public static final String module = RegionViewHandler.class.getName(); 52 53 protected ServletContext context; 54 protected RegionManager regionManager = null; 55 56 public void init(ServletContext context) throws ViewHandlerException { 57 this.context = context; 58 59 URL regionFile = null; 60 try { 61 regionFile = context.getResource("/WEB-INF/regions.xml"); 62 } catch (java.net.MalformedURLException e) { 63 throw new IllegalArgumentException ("regions.xml file URL invalid: " + e.getMessage()); 64 } 65 66 if (regionFile == null) { 67 Debug.logWarning("No " + "/WEB-INF/regions.xml" + " file found in this webapp", module); 68 } else { 69 Debug.logVerbose("Loading regions from XML file in: " + regionFile, module); 70 regionManager = new RegionManager(regionFile); 71 } 72 } 73 74 public void render(String name, String page, String info, String contentType, String encoding, HttpServletRequest request, HttpServletResponse response) throws ViewHandlerException { 75 78 if (request == null) { 79 throw new ViewHandlerException("The HttpServletRequest object was null, how did that happen?"); 80 } 81 if (page == null || page.length() == 0) { 82 throw new ViewHandlerException("Page name was null or empty, but must be specified"); 83 } 84 85 request.setAttribute(ContextFilter.FORWARDED_FROM_SERVLET, new Boolean (true)); 87 88 Region region = regionManager.getRegion(page); 89 if (region == null) { 90 throw new ViewHandlerException("Error: could not find region with name " + page); 91 } 92 93 try { 94 RegionStack.push(request, region); 96 97 region.render(request, response); 98 } catch (IOException ie) { 99 throw new ViewHandlerException("IO Error in region", ie); 100 } catch (ServletException e) { 101 Throwable throwable = e.getRootCause() != null ? e.getRootCause() : e; 102 103 if (throwable instanceof JspException ) { 104 JspException jspe = (JspException ) throwable; 105 106 throwable = jspe.getRootCause() != null ? jspe.getRootCause() : jspe; 107 } 108 Debug.logError(throwable, "ServletException rendering JSP view", module); 109 throw new ViewHandlerException(e.getMessage(), throwable); 110 } 111 RegionStack.pop(request); 112 } 113 } 114 | Popular Tags |