@Override public Object getRequest() { // If JSP AFTER_VIEW_CONTENT processing has been activated by the // JspViewDeclarationLanguage#buildView(FacesContext, UIViewRoot) method, then return a // ServletRequest that // wraps/decorates the current PortletRequest. This is necessary because the MyFaces // JspViewDeclarationLanguage#buildView(FacesContext, UIViewRoot) method has a Servlet API // dependency due to // explicit casts to HttpServletRequest. if (bridgeContext.isProcessingAfterViewContent()) { if ((bridgeAfterViewContentRequest == null) || (bridgeAfterViewContentRequest.getWrapped() != portletRequest)) { BridgeWriteBehindSupportFactory bridgeWriteBehindSupportFactory = (BridgeWriteBehindSupportFactory) FactoryExtensionFinder.getFactory(BridgeWriteBehindSupportFactory.class); bridgeAfterViewContentRequest = bridgeWriteBehindSupportFactory.getBridgeAfterViewContentRequest(portletRequest); } return bridgeAfterViewContentRequest; } else { return portletRequest; } }
protected MessageContext getMessageContext() { MessageContextFactory messageContextFactory = (MessageContextFactory) FactoryExtensionFinder.getFactory(MessageContextFactory.class); return messageContextFactory.getMessageContext(); }
protected void encodePreview( FacesContext facesContext, ResponseWriter responseWriter, InputFile inputFile) throws IOException { // Delegate writing of the entire <input type="file"...> ... </input> element to the delegate // renderer. DelegationResponseWriter delegationResponseWriter = new InputFileDelegationResponseWriter(responseWriter, inputFile.isAuto()); super.encodeMarkupEnd(facesContext, inputFile, delegationResponseWriter); // Format the preview-table.html template and write it to the response. Locale locale = facesContext.getViewRoot().getLocale(); String clientId = inputFile.getClientId(facesContext); responseWriter.startElement("div", inputFile); responseWriter.startElement("table", inputFile); responseWriter.writeAttribute("id", clientId + "_table", null); responseWriter.writeAttribute("class", "table table-bordered", null); responseWriter.startElement("thead", inputFile); responseWriter.writeAttribute("class", "table-columns", null); responseWriter.startElement("tr", inputFile); responseWriter.startElement("th", inputFile); MessageContextFactory messageContextFactory = (MessageContextFactory) FactoryExtensionFinder.getFactory(MessageContextFactory.class); MessageContext messageContext = messageContextFactory.getMessageContext(); String i18nFileName = messageContext.getMessage(locale, "file-name"); responseWriter.writeText(i18nFileName, null); responseWriter.endElement("th"); responseWriter.startElement("th", inputFile); String i18nFileType = messageContext.getMessage(locale, "file-type"); responseWriter.writeText(i18nFileType, null); responseWriter.endElement("th"); responseWriter.startElement("th", inputFile); String i18nFileSize = messageContext.getMessage(locale, "file-size"); responseWriter.writeText(i18nFileSize, null); responseWriter.endElement("th"); responseWriter.endElement("tr"); responseWriter.endElement("thead"); responseWriter.startElement("tfoot", inputFile); responseWriter.startElement("tr", inputFile); responseWriter.startElement("td", inputFile); responseWriter.writeAttribute("colspan", "3", null); String i18nNoFilesSelected = messageContext.getMessage(locale, "no-files-selected"); responseWriter.writeText(i18nNoFilesSelected, null); responseWriter.endElement("td"); responseWriter.endElement("tr"); responseWriter.endElement("tfoot"); responseWriter.startElement("tbody", inputFile); responseWriter.startElement("tr", inputFile); responseWriter.endElement("tr"); responseWriter.endElement("tbody"); responseWriter.endElement("table"); responseWriter.endElement("div"); }
/** * This method overrides the {@link #decode(FacesContext, UIComponent)} method so that it can * avoid a Servlet-API dependency in the RichFaces FileUploadRenderer. Note that rich:fileUpload * will do an Ajax postback and invoke the JSF lifecycle for each individual file. */ @Override public void decode(FacesContext facesContext, UIComponent uiComponent) { try { // Get the UploadedFile from the request attribute map. ContextMapFactory contextMapFactory = (ContextMapFactory) FactoryExtensionFinder.getFactory(ContextMapFactory.class); BridgeContext bridgeContext = BridgeContext.getCurrentInstance(); Map<String, Collection<UploadedFile>> uploadedFileMap = contextMapFactory.getUploadedFileMap(bridgeContext); if (uploadedFileMap != null) { // Use reflection to create a dynamic proxy class that implements the RichFaces UploadedFile // interface. Class<?> uploadedFileInterface = Class.forName(RICHFACES_UPLOADED_FILE_FQCN); Class<?> fileUploadEventClass = Class.forName(RICHFACES_FILE_UPLOAD_EVENT_FQCN); ClassLoader classLoader = uploadedFileInterface.getClassLoader(); String clientId = uiComponent.getClientId(facesContext); Collection<UploadedFile> uploadedFiles = uploadedFileMap.get(clientId); if (uploadedFiles != null) { for (UploadedFile uploadedFile : uploadedFiles) { RichFacesUploadedFileHandler richFacesUploadedFileHandler = new RichFacesUploadedFileHandler(uploadedFile); Object richFacesUploadedFile = Proxy.newProxyInstance( classLoader, new Class[] {uploadedFileInterface}, richFacesUploadedFileHandler); FacesEvent fileUploadEvent = (FacesEvent) fileUploadEventClass .getConstructor(UIComponent.class, uploadedFileInterface) .newInstance(uiComponent, richFacesUploadedFile); // Queue the RichFaces FileUploadEvent instance so that it can be handled with an // ActionListener. uiComponent.queueEvent(fileUploadEvent); } } } } catch (Exception e) { logger.error(e); } }
@Override public void endElement(String name) throws IOException { if (StringPool.BODY.equals(name)) { super.startElement(StringPool.SCRIPT, uiComponent); super.writeAttribute(StringPool.TYPE, ContentTypes.TEXT_JAVASCRIPT, null); FacesContext facesContext = FacesContext.getCurrentInstance(); ExternalContext externalContext = facesContext.getExternalContext(); ClientScriptFactory clientScriptFactory = (ClientScriptFactory) FactoryExtensionFinder.getFactory(ClientScriptFactory.class); ClientScript clientScript = clientScriptFactory.getClientScript(externalContext); super.write(clientScript.toString()); super.endElement(StringPool.SCRIPT); } super.endElement(name); }
public ExternalContextImpl( PortletContext portletContext, PortletRequest portletRequest, PortletResponse portletResponse) { super(portletContext, portletRequest, portletResponse); BeanManagerFactory beanManagerFactory = (BeanManagerFactory) FactoryExtensionFinder.getFactory(BeanManagerFactory.class); this.beanManager = beanManagerFactory.getBeanManager(); try { boolean requestChanged = false; boolean responseChanged = false; preInitializeObjects(requestChanged, responseChanged); } catch (Exception e) { logger.error(e); } }
public static void renderScript( FacesContext facesContext, UIComponent uiComponent, String script, String use) { // Render the script at the bottom of the page by setting the WebKeys.AUI_SCRIPT_DATA request // attribute. ExternalContext externalContext = facesContext.getExternalContext(); ClientScriptFactory clientScriptFactory = (ClientScriptFactory) FactoryExtensionFinder.getFactory(ClientScriptFactory.class); ClientScript clientScript = clientScriptFactory.getClientScript(externalContext); String portletId = StringPool.BLANK; Object portlet = externalContext.getRequestMap().get(WebKeys.RENDER_PORTLET); if (portlet != null) { portletId = LiferayPortletUtil.getPortletId(portlet); } clientScript.append(portletId, script, use); }
@Override public Object getResponse() { // If JSP AFTER_VIEW_CONTENT processing has been activated by the // JspViewDeclarationLanguage#buildView(FacesContext, UIViewRoot) method, then return a // ServletResponse that is // able to handle the AFTER_VIEW_CONTENT feature. This is necessary because the Mojarra // JspViewHandlingStrategy#getWrapper(ExternalContext) method has a Servlet API dependency due // to explicit casts // to HttpServletResponse. Additionally, the MyFaces // JspViewDeclarationLanguage#buildView(FacesContext, // UIViewRoot) method has an explicit cast to HttpServletResponse. if (bridgeContext.isProcessingAfterViewContent()) { if (facesImplementationServletResponse == null) { if ((bridgeAfterViewContentResponse == null) || (bridgeAfterViewContentResponse.getWrapped() != portletResponse)) { BridgeWriteBehindSupportFactory bridgeWriteBehindSupportFactory = (BridgeWriteBehindSupportFactory) FactoryExtensionFinder.getFactory(BridgeWriteBehindSupportFactory.class); bridgeAfterViewContentResponse = bridgeWriteBehindSupportFactory.getBridgeAfterViewContentResponse( portletResponse, getRequestLocale()); } return bridgeAfterViewContentResponse; } else { return facesImplementationServletResponse; } } else { if (isBridgeFlashServletResponseRequired()) { return createFlashHttpServletResponse(); } else { return portletResponse; } } }
public static String getAlloyBeginScript( FacesContext facesContext, String[] modules, String config) { boolean browserIE = false; float browserMajorVersion = 1; BrowserSnifferFactory browserSnifferFactory = (BrowserSnifferFactory) FactoryExtensionFinder.getFactory(BrowserSnifferFactory.class); BrowserSniffer browserSniffer = browserSnifferFactory.getBrowserSniffer(facesContext.getExternalContext()); if (LIFERAY_PORTAL_DETECTED) { browserIE = browserSniffer.isIe(); browserMajorVersion = browserSniffer.getMajorVersion(); } else if (LIFERAY_FACES_BRIDGE_DETECTED) { // no-op because there is no way to obtain the underlying HttpServletRequest. } else { browserIE = browserSniffer.isIe(); browserMajorVersion = browserSniffer.getMajorVersion(); } return getAlloyBeginScript(modules, config, browserMajorVersion, browserIE); }
@Override public void setResponse(Object response) { // Assume that the JSP_AFTER_VIEW_CONTENT feature is deactivated. facesImplementationServletResponse = null; // If JSP AFTER_VIEW_CONTENT processing has been activated by the bridge's // ViewDeclarationLanguageJspImpl#buildView(FacesContext, UIViewRoot) method, then wrap the // specified response // object with a ServletResponse that is able to handle the AFTER_VIEW_CONTENT feature. This is // necessary // because the Mojarra JspViewHandlingStrategy#getWrapper(ExternalContext) method has a Servlet // API dependency // due to explicit casts to HttpServletResponse. if (bridgeContext.isProcessingAfterViewContent()) { // If the specified response is of type HttpServletResponseWrapper, then it is almost certain // that Mojarra's // JspViewHandlingStrategy#executePageToBuildView(FacesContext, UIViewRoot) method is // attempting to wrap the // bridge's response object (that it originally got by calling the // ExternalContext#getResponse() method) // with it's ViewHandlerResponseWrapper, which extends HttpServletResponseWrapper. if (response instanceof HttpServletResponseWrapper) { this.facesImplementationServletResponse = (ServletResponse) response; HttpServletResponseWrapper httpServletResponseWrapper = (HttpServletResponseWrapper) response; ServletResponse wrappedServletResponse = httpServletResponseWrapper.getResponse(); if (wrappedServletResponse instanceof BridgeAfterViewContentResponse) { BridgeAfterViewContentResponse bridgeAfterViewContentPreResponse = (BridgeAfterViewContentResponse) wrappedServletResponse; PortletResponse wrappedPortletResponse = bridgeAfterViewContentPreResponse.getWrapped(); BridgeWriteBehindSupportFactory bridgeWriteBehindSupportFactory = (BridgeWriteBehindSupportFactory) FactoryExtensionFinder.getFactory(BridgeWriteBehindSupportFactory.class); BridgeWriteBehindResponse bridgeWriteBehindResponse = bridgeWriteBehindSupportFactory.getBridgeWriteBehindResponse( (MimeResponse) wrappedPortletResponse, facesImplementationServletResponse); // Note: See comments in BridgeContextImpl#dispatch(String) regarding Liferay's inability // to // accept a wrapped response. This is indeed supported in Pluto. this.portletResponse = (PortletResponse) bridgeWriteBehindResponse; } else { // Since we're unable to determine the wrapped PortletResponse, the following line will // throw an // intentional ClassCastException. Note that this case should never happen. this.portletResponse = (PortletResponse) response; } } // Otherwise, the specified response is of type BridgeAfterViewContentResponse, then Mojarra's // JspViewHandlingStrategy#executePageToBuildView(FacesContext, UIViewRoot) method is trying // to restore the // bridge's response object that it originally got from calling the // ExternalContext#getResponse() method // prior to wrapping with it's ViewHandlerResponseWrapper. else if (response instanceof BridgeAfterViewContentResponse) { BridgeAfterViewContentResponse bridgeAfterViewContentResponse = (BridgeAfterViewContentResponse) response; this.portletResponse = bridgeAfterViewContentResponse.getWrapped(); } // Otherwise, assume that the specified response is a PortletResponse. else { this.portletResponse = (PortletResponse) response; } } // Otherwise, since the JSF AFTER_VIEW_CONTENT feature is not activated, assume that the // specified response is // a PortletResponse. else { this.portletResponse = (PortletResponse) response; } try { boolean requestChanged = false; boolean responseChanged = true; preInitializeObjects(requestChanged, responseChanged); } catch (Exception e) { logger.error(e); } }
protected void encodeProgress( FacesContext facesContext, ResponseWriter responseWriter, UIComponent uiComponent, String clientId) throws IOException { Locale locale = facesContext.getViewRoot().getLocale(); responseWriter.startElement("div", uiComponent); responseWriter.writeAttribute("id", clientId + "_selectFilesBox", null); responseWriter.writeAttribute("class", "select-files-box", null); responseWriter.endElement("div"); responseWriter.startElement("div", uiComponent); responseWriter.writeAttribute("id", clientId + "_uploadFilesBox", null); responseWriter.writeAttribute("class", "upload-files-box", null); responseWriter.startElement("button", uiComponent); responseWriter.writeAttribute("id", clientId + "_uploadFilesButton", null); responseWriter.writeAttribute("class", "alloy-button", null); MessageContextFactory messageContextFactory = (MessageContextFactory) FactoryExtensionFinder.getFactory(MessageContextFactory.class); MessageContext messageContext = messageContextFactory.getMessageContext(); String i18nUploadFiles = messageContext.getMessage(locale, "upload-files"); responseWriter.writeText(i18nUploadFiles, null); responseWriter.endElement("button"); responseWriter.endElement("div"); responseWriter.startElement("div", uiComponent); responseWriter.startElement("table", uiComponent); responseWriter.writeAttribute("id", clientId + "_table", null); responseWriter.writeAttribute("class", "table table-bordered", null); responseWriter.startElement("thead", uiComponent); responseWriter.writeAttribute("class", "table-columns", null); responseWriter.startElement("tr", uiComponent); responseWriter.startElement("th", uiComponent); String i18nFileName = messageContext.getMessage(locale, "file-name"); responseWriter.writeText(i18nFileName, null); responseWriter.endElement("th"); responseWriter.startElement("th", uiComponent); String i18nFileType = messageContext.getMessage(locale, "file-type"); responseWriter.writeText(i18nFileType, null); responseWriter.endElement("th"); responseWriter.startElement("th", uiComponent); String i18nFileSize = messageContext.getMessage(locale, "file-size"); responseWriter.writeText(i18nFileSize, null); responseWriter.endElement("th"); responseWriter.startElement("th", uiComponent); String i18nProgress = messageContext.getMessage(locale, "progress"); responseWriter.writeText(i18nProgress, null); responseWriter.endElement("th"); responseWriter.endElement("tr"); responseWriter.endElement("thead"); responseWriter.startElement("tfoot", uiComponent); responseWriter.startElement("tr", uiComponent); responseWriter.startElement("td", uiComponent); responseWriter.writeAttribute("colspan", "4", null); String i18nNoFilesSelected = messageContext.getMessage(locale, "no-files-selected"); responseWriter.writeText(i18nNoFilesSelected, null); responseWriter.endElement("td"); responseWriter.endElement("tr"); responseWriter.endElement("tfoot"); responseWriter.startElement("tbody", uiComponent); responseWriter.startElement("tr", uiComponent); responseWriter.endElement("tr"); responseWriter.endElement("tbody"); responseWriter.endElement("table"); responseWriter.endElement("div"); }