📄 portletframe.java
字号:
DefaultPortletAction action = event.getAction(); renderParams.clear(); onlyRender = false; String pid = (String) request.getAttribute(SportletProperties.PORTLETID); try { portletInvoker.actionPerformed(pid, action, event.getHttpServletRequest(), event.getHttpServletResponse()); Throwable e = (Throwable) request.getAttribute(SportletProperties.PORTLETERROR + pid); if (e != null) { setError(event.getActionRequest(), e); } } catch (Exception e) { log.error("An error occured performing action on: " + pid, e.getCause()); this.setError(event.getActionRequest(), e.getCause()); // catch it and keep processing } // see if mode has been set PortletMode mymode = (PortletMode) request.getAttribute(SportletProperties.PORTLET_MODE); //PortletMode mymode = new PortletMode(mymodeStr); if (mymode != null) { //System.err.println("setting title mode to " + mymode); titleBar.setPortletMode(mymode); } // see if state has been set PortletFrameEventImpl frameEvent = null; WindowState mystate = (WindowState) request.getAttribute(SportletProperties.PORTLET_WINDOW); if (mystate != null) { //System.err.println("setting title state to " + mystate); titleBar.setWindowState(mystate); if (mystate.equals(WindowState.MINIMIZED)) { renderPortlet = false; } else if (mystate.equals(WindowState.NORMAL)) { renderPortlet = true; frameEvent = new PortletFrameEventImpl(this, PortletFrameEvent.FrameAction.FRAME_RESTORED, COMPONENT_ID); frameEvent.setOriginalWidth(originalWidth); } else if (mystate.equals(WindowState.MAXIMIZED)) { renderPortlet = true; frameEvent = new PortletFrameEventImpl(this, PortletFrameEvent.FrameAction.FRAME_MAXIMIZED, COMPONENT_ID); } for (PortletComponent comp : listeners) { event.addNewRenderEvent(frameEvent); comp.actionPerformed(event); } } } // see if render params are set from actionResponse Map tmpParams = (Map) request.getAttribute(SportletProperties.RENDER_PARAM_PREFIX + portletClass + "_" + componentIDStr); if (tmpParams != null) renderParams = tmpParams; addRenderParams(event.getHttpServletRequest()); for (PortletComponent comp : listeners) { event.addNewRenderEvent(titleBarEvent); comp.actionPerformed(event); } } } private void addRenderParams(HttpServletRequest req) { // first get rid of existing render params Iterator it; if (onlyRender) { it = renderParams.keySet().iterator(); while (it.hasNext()) { String key = (String) it.next(); if (key.startsWith(SportletProperties.RENDER_PARAM_PREFIX)) { if (req.getParameter(key) == null) { //System.err.println("removing existing render param " + key); it.remove(); } } } } Map tmpParams = req.getParameterMap(); if (tmpParams != null) { it = tmpParams.keySet().iterator(); while (it.hasNext()) { String key = (String) it.next(); ///String[] paramValues = req.getParameterValues( key ); if (key.startsWith(SportletProperties.RENDER_PARAM_PREFIX)) { //System.err.println("replacing render param " + key); renderParams.put(key, tmpParams.get(key)); } } } } /** * Renders the portlet frame component * * @param event a gridsphere event */ public void doRender(GridSphereEvent event) { super.doRender(event); RenderRequest req = event.getRenderRequest(); RenderResponse res = event.getRenderResponse(); req.setAttribute(SportletProperties.PORTLET_WINDOW_ID, windowId); if (req.getAttribute(SportletProperties.LAYOUT_EDIT_MODE) != null) { StringBuffer content = new StringBuffer(); PortletURLImpl portletURI = (PortletURLImpl) res.createActionURL(); String editLink = portletURI.toString(); portletURI.setAction(DELETE_PORTLET); /*getLocalizedText(req, "DELETE")*/ String deleteLink = portletURI.toString(); /*getLocalizedText(req, "EDIT")*/ content.append("<br/><fieldset>"); content.append(portletName); content.append(" <a href=\""); content.append(editLink); content.append("\">"); content.append("<img src=\""); content.append(req.getContextPath()); content.append("/images/edit.gif\" alt=\"").append(getLocalizedText(req, "EDIT")).append("\"/>"); content.append("</a> <a href=\""); content.append(deleteLink); content.append("\">"); content.append("<img src=\""); content.append(req.getContextPath()); content.append("/images/delete.gif\" alt=\"").append(getLocalizedText(req, "DELETE")).append("\"/>"); content.append("</a></fieldset>"); setBufferedOutput(req, content); return; } // check permissions if (!requiredRoleName.equals("") && (!req.isUserInRole(requiredRoleName))) return; // check for render params if (onlyRender) { if ((event.getComponentID().equals(componentIDStr))) { addRenderParams(event.getHttpServletRequest()); } } onlyRender = true; String id = req.getPortletSession(true).getId(); StringBuffer frame = (StringBuffer) cacheService.getCached(this.getComponentID() + portletClass + id); String nocache = (String) req.getAttribute(CacheService.NO_CACHE); if ((frame != null) && (nocache == null)) { setBufferedOutput(req, frame); return; } frame = new StringBuffer(); req.setAttribute(SportletProperties.PORTLETID, portletClass); StringBuffer preframe = frameView.doStart(event, this); StringBuffer postframe = new StringBuffer(); // Render title bar if (!transparent) { titleBar.doRender(event); } else { req.setAttribute(SportletProperties.PORTLET_MODE, titleBar.getPortletMode()); req.setAttribute(SportletProperties.PREVIOUS_MODE, titleBar.getPreviousMode()); req.setAttribute(SportletProperties.PORTLET_WINDOW, titleBar.getWindowState()); } super.doRender(event); if (req.getAttribute(SportletProperties.RESPONSE_COMMITTED) != null) { renderPortlet = false; } String appID = portletRegistryService.getApplicationPortletID(portletClass); ApplicationPortlet appPortlet = portletRegistryService.getApplicationPortlet(appID); if (appPortlet != null) { Set<String> supportedModes = appPortlet.getSupportedModes(event.getClient().getMimeType()); SortedSet<String> mimeTypes = appPortlet.getSupportedMimeTypes(req.getPortletMode()); req.setAttribute(SportletProperties.ALLOWED_MODES, supportedModes); req.setAttribute(SportletProperties.MIME_TYPES, mimeTypes); } req.setAttribute(SportletProperties.PORTLET_WINDOW_ID, windowId); StringWriter storedWriter = new StringWriter(); PrintWriter writer = new PrintWriter(storedWriter); if (renderPortlet) { if (!transparent) { postframe.append(titleBar.getBufferedOutput(req)); } postframe.append(frameView.doStartBorder(event, this)); RenderResponse wrappedResponse = new StoredPortletResponseImpl(event.getHttpServletRequest(), event.getHttpServletResponse(), writer); if (isClosing) { postframe.append(frameView.doRenderCloseFrame(event, this)); } else { //System.err.println("in portlet frame render: class= " + portletClass + " setting prev mode= " + req.getPreviousMode() + " cur mode= " + req.getMode()); Throwable ex = getError(req); if (ex != null) { doRenderError(req, wrappedResponse, ex); postframe.append(storedWriter.toString()); } else if ((titleBar != null) && (titleBar.hasRenderError())) { postframe.append(titleBar.getErrorMessage()); } else { try { if (!renderParams.isEmpty()) { //System.err.println("PortletFrame: in " + portletClass + " sending render params"); //System.err.println("in render " + portletClass + " there are render params in the frame setting in request! key= " + SportletProperties.RENDER_PARAM_PREFIX + portletClass + "_" + componentIDStr); req.setAttribute(SportletProperties.RENDER_PARAM_PREFIX + portletClass + "_" + componentIDStr, renderParams); } DefaultPortletRender render = event.getRender(); portletInvoker.service((String) req.getAttribute(SportletProperties.PORTLETID), render, (HttpServletRequest) req, (HttpServletResponse) wrappedResponse); lastFrame = storedWriter.toString(); postframe.append(lastFrame); } catch (Exception e) { doRenderError(req, wrappedResponse, e); postframe.append(storedWriter.toString()); } } } postframe.append(frameView.doEndBorder(event, this)); } else { postframe.append(frameView.doRenderMinimizeFrame(event, this)); } postframe.append(frameView.doEnd(event, this)); if (req.getAttribute(SportletProperties.RESPONSE_COMMITTED) != null) { renderPortlet = true; } // piece together portlet frame + title depending on whether title was set during doXXX method // or not frame.append(preframe); if (!transparent) { String titleStr = (String) req.getAttribute(SportletProperties.PORTLET_TITLE); if (titleStr == null) { titleStr = titleBar.getTitle(); } frame.append(titleBar.getPreBufferedTitle(req)); frame.append(titleStr); frame.append(titleBar.getPostBufferedTitle(req)); } req.removeAttribute(SportletProperties.PORTLET_TITLE); frame.append(postframe); setBufferedOutput(req, frame); // check if expiration was set in render response Map props = (Map) req.getAttribute(SportletProperties.PORTAL_PROPERTIES); if (props != null) { List vals = (List) props.get(RenderResponse.EXPIRATION_CACHE); if (vals != null) { String cacheExpiryStr = (String) vals.get(0); if (cacheExpiryStr != null) { try { cacheExpiration = Integer.valueOf(cacheExpiryStr).intValue(); } catch (IllegalArgumentException e) { // do nothing } } } } if (nocache == null) { if ((cacheExpiration > 0) || (cacheExpiration == -1)) { cacheService.cache(this.getComponentID() + portletClass + id, frame, cacheExpiration); } } } public void setError(PortletRequest req, Throwable ex) { req.getPortletSession(true).setAttribute(SportletProperties.PORTLETERROR + portletClass, ex, PortletSession.APPLICATION_SCOPE); } public Throwable getError(PortletRequest req) { Throwable ex = (Throwable) req.getPortletSession(true).getAttribute(SportletProperties.PORTLETERROR + portletClass, PortletSession.APPLICATION_SCOPE); removeError(req); return ex; } public void removeError(PortletRequest req) { req.getPortletSession(true).removeAttribute(SportletProperties.PORTLETERROR + portletClass, PortletSession.APPLICATION_SCOPE); } public void doRenderError(RenderRequest req, RenderResponse res, Throwable ex) { Throwable cause = ex.getCause(); if (cause == null) { cause = ex; } try { MailService mailService = (MailService) PortletServiceFactory.createPortletService(MailService.class, true); Boolean sendMail = Boolean.valueOf(portalConfigService.getProperty(PortalConfigService.ENABLE_ERROR_HANDLING)); if (sendMail.booleanValue()) { MailMessage mailToUser = new MailMessage(); String noreply = portalConfigService.getProperty(PortalConfigService.MAIL_FROM); mailToUser.setSender(noreply); String portalAdmin = portalConfigService.getProperty(PortalConfigService.PORTAL_ADMIN_EMAIL); mailToUser.setEmailAddress(portalAdmin); mailToUser.setSubject(getLocalizedText(req, "PORTAL_ERROR_SUBJECT")); StringBuffer body = new StringBuffer(); body.append(getLocalizedText(req, "PORTAL_ERROR_BODY")); body.append("\n\n"); body.append("portlet title: "); body.append(titleBar.getTitle()); body.append("\n\n"); User user = (User) req.getAttribute(SportletProperties.PORTLET_USER); body.append(DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime())); body.append("\n\n"); if (user != null) { body.append(user); body.append("\n\n"); } StringWriter sw = new StringWriter(); PrintWriter pout = new PrintWriter(sw); cause.printStackTrace(pout); body.append(sw.getBuffer()); mailToUser.setBody(body.toString()); try { mailService.sendMail(mailToUser); req.setAttribute("lastFrame", lastFrame); PortletRequestDispatcher dispatcher = req.getPortletSession().getPortletContext().getRequestDispatcher("/jsp/errors/custom_error.jsp"); dispatcher.include(req, res); return; } catch (Exception e) { log.error("Unable to send mail message!", e); } } } catch (PortletServiceException e) { log.error("Unable to get instance of needed portlet services", e); } try { req.setAttribute("error", cause); PortletRequestDispatcher dispatcher = req.getPortletSession().getPortletContext().getRequestDispatcher("/jsp/errors/custom_error.jsp"); dispatcher.include(req, res); } catch (Exception e) { System.err.println("Unable to include custom error page!!"); e.printStackTrace(); } } public Object clone() throws CloneNotSupportedException { PortletFrame f = (PortletFrame) super.clone(); f.titleBar = (this.titleBar == null) ? null : (PortletTitleBar) this.titleBar.clone(); f.outerPadding = this.outerPadding; f.transparent = this.transparent; f.innerPadding = this.innerPadding; f.portletClass = this.portletClass; f.renderPortlet = this.renderPortlet; return f; } public String toString() { StringBuffer sb = new StringBuffer(); sb.append(super.toString()); sb.append("\nportlet class=").append(portletClass); return sb.toString(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -