@Override public void encodeMarkupEnd(FacesContext facesContext, UIComponent uiComponent) throws IOException { // If the component should show the progress table, then InputFile inputFile = (InputFile) uiComponent; ResponseWriter responseWriter = facesContext.getResponseWriter(); if (inputFile.isShowProgress()) { // Finish encoding of the outermost <div> element. Since the template contains its own "Select // Files" // button, delegation must not occur. responseWriter.endElement("div"); } // Otherwise, if the component should show the preview table, then else if (inputFile.isShowPreview()) { encodePreview(facesContext, responseWriter, inputFile); // Finish encoding of the outermost <div> element. responseWriter.endElement("div"); } // Otherwise, delegate writing of the entire <input type="file"...> ... </input> element to the // delegate // renderer. else { DelegationResponseWriter delegationResponseWriter = new InputFileDelegationResponseWriter(responseWriter, inputFile.isAuto()); super.encodeMarkupEnd(facesContext, uiComponent, delegationResponseWriter); } }
@Override public void encodeMarkupBegin(FacesContext facesContext, UIComponent uiComponent) throws IOException { ResponseWriter responseWriter = facesContext.getResponseWriter(); InputFile inputFile = (InputFile) uiComponent; // If the component should render the preview table or the upload progress table, then if (inputFile.isShowPreview() || inputFile.isShowProgress()) { // Start encoding the outermost <div> element. responseWriter.startElement("div", uiComponent); String clientId = uiComponent.getClientId(facesContext); responseWriter.writeAttribute("id", clientId, "id"); RendererUtil.encodeStyleable(responseWriter, (Styleable) uiComponent); // If the component should render the upload progress table, then format the // progress-table.html template // and write it to the response. if (inputFile.isShowProgress()) { encodeProgress(facesContext, responseWriter, uiComponent, clientId); } // Otherwise, delegate writing to the delegate renderer. Note that this effectively a no-op // with Mojarra and // MyFaces, since they both delay writing of the entire <input type="file"...> ... </input> // element until // encodeEnd. else { super.encodeMarkupBegin(facesContext, uiComponent); } } // Otherwise, delegate writing to the delegate renderer. Note that this effectively a no-op with // Mojarra and // MyFaces, since they both delay writing of the entire <input type="file"...> ... </input> // element until // encodeEnd. else { super.encodeMarkupBegin(facesContext, uiComponent); } }
@Override public void encodeJavaScriptCustom(FacesContext facesContext, UIComponent uiComponent) throws IOException { ResponseWriter responseWriter = facesContext.getResponseWriter(); InputFile inputFile = (InputFile) uiComponent; JavaScriptFragment alloyNamespace = new JavaScriptFragment("A"); // Determine the valid content-types and maximum file size from the validator (if specified). JavaScriptFragment contentTypes = new JavaScriptFragment("[]"); String validContentTypes = inputFile.getContentTypes(); if (validContentTypes != null) { contentTypes = toJavaScriptArray(validContentTypes.split(",")); } String clientId = inputFile.getClientId(facesContext); Long maxFileSize = inputFile.getMaxFileSize(); if (maxFileSize == null) { maxFileSize = Long.MAX_VALUE; } // If the component should render the upload progress table, then initialize the YUI progress // uploader widget. if (inputFile.isShowProgress()) { String clientVarName = getClientVarName(facesContext, inputFile); String clientKey = inputFile.getClientKey(); if (clientKey == null) { clientKey = clientVarName; } UIViewRoot viewRoot = facesContext.getViewRoot(); Locale locale = viewRoot.getLocale(); String formClientId = getParentFormClientId(inputFile); Application application = facesContext.getApplication(); ViewHandler viewHandler = application.getViewHandler(); String actionURL = viewHandler.getActionURL(facesContext, viewRoot.getViewId()); String partialActionURL = facesContext.getExternalContext().encodePartialActionURL(actionURL); String namingContainerId = ""; if (viewRoot instanceof NamingContainer) { namingContainerId = viewRoot.getContainerClientId(facesContext); } AjaxParameters ajaxParameters = new AjaxParameters(inputFile, clientId, formClientId); String execute = ajaxParameters.getExecute(); String render = ajaxParameters.getRender(); String notStartedMessage = getMessageContext().getMessage(locale, "not-started"); JavaScriptFragment clientComponent = new JavaScriptFragment("Liferay.component('" + clientKey + "')"); encodeFunctionCall( responseWriter, "LFAI.initProgressUploader", alloyNamespace, clientComponent, contentTypes, clientId, formClientId, namingContainerId, inputFile.isAuto(), execute, render, partialActionURL, maxFileSize, notStartedMessage); } // Otherwise, if the component should render the upload preview table, then format the // preview-uploader.js // template and write it to the response. else if (inputFile.isShowPreview()) { encodeFunctionCall( responseWriter, "LFAI.initPreviewUploader", alloyNamespace, contentTypes, clientId, maxFileSize); } }