Estou tentando fazer um upload de um arquivo excel porém ele não está sendo reconhecido, estou seguindo o exemplo do primefaces, mas mesmo assim não está dando certo. Ele não reconhece o file no if(file != null), isso retorna null e vai direto pro else.
<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEhtmlPUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:h="http://java.sun.com/jsf/html"xmlns:p="http://primefaces.org/ui"xmlns:f="http://java.sun.com/jsf/core"><ui:compositionid="composicao"template="/template.xhtml"><!--<ui:definename="title"><h:outputTextvalue="#{bundle.CreateAreasTitle}"></h:outputText></ui:define>--><ui:definename="body"><f:view><f:metadata><f:viewParamname="codigo"value="#{areasController.selected}"/></f:metadata><h:outputScriptname="js/locale-primefaces.js"/><h:outputScriptname="js/jquery.maskMoney.js"/><scripttype="text/javascript">$(document).ready(format);functionformat(){}</script><ui:includesrc="/pagina/metaBaseAtivos/Modal.xhtml"><ui:paramname="editar"value="true"/><ui:paramname="comando"value="#{areasController.selecionarMetaBaseAtivosList}"/></ui:include><ui:includesrc="/pagina/cr/Modal.xhtml"><ui:paramname="editar"value="true"/><ui:paramname="comando"value="#{areasController.selecionarCrList}"/></ui:include><h:formid="form"><p:panelstyleClass="centralizado"header="#{bundle.CreateAreasTitle}"style="margin-top: 10px; width: 1024px;"><h:panelGridwidth="100%"columns="1"><h:outputLabelvalue="#{bundle.CreateAreasLabel_area}"for="area"/><p:inputTextid="area"onblur="value=value.toUpperCase()"maxlength="255"value="#{areasController.selected.area}"title="#{bundle.CreateAreasTitle_area}"required="true"requiredMessage="Preencha o campo #{bundle.CreateAreasTitle_area}"/></h:panelGrid></p:panel><p:panelstyleClass="centralizado"header="#{bundle.acoes}"style="margin-top: 10px; width: 1024px;"><h:panelGridstyle="text-align: center"columns="3"width="100%"><p:commandButtonid="botaoSalvar"icon="ui-icon-disk"action="#{areasController.create}"value="#{bundle.CreateAreasSaveLink}"ajax="false"/><p:commandButtonid="botaoConsultar"icon="ui-icon-search"action="#{areasController.prepareList}"value="#{bundle.CreateAreasShowAllLink}"ajax="false"immediate="true"/><p:commandButtonid="botaoNovo"icon="ui-icon-document"value="#{bundle.novo}"action="#{areasController.prepareCreate}"ajax="false"immediate="true"/></h:panelGrid></p:panel></h:form><h:formenctype="multipart/form-data"id="uploadExcel"><p:panelstyleClass="centralizado"><p:growlid="messages"showDetail="true"/><p:fileUploadlabel="Escolher"value="#{areasController.file}"mode="simple"skinSimple="true"/><p:commandButtonvalue="Enviar"ajax="false"actionListener="#{areasController.upload}"process="@this, form:uploadExcel"/></p:panel></h:form></f:view></ui:define></ui:composition></html>
Apenas a parte que faz referencia ao upload do controller:
publicUploadedFilegetFile(){returnfile;}publicvoidsetFile(UploadedFilefile){this.file=file;}publicvoidupload()throwsIOException,BiffException{Areasarea=newAreas();if(file!=null){/* pega o arquiivo do Excel */Workbookworkbook=Workbook.getWorkbook(newFile(getFile().getFileName()));/* pega a primeira planilha dentro do arquivo XLS */Sheetsheet=workbook.getSheet(0);//Pega a quantidade de linhas da planilhaintlinhas=sheet.getRows();for(inti=0;i<linhas;i++){/* pega os valores das células como se numa matriz */Cella1=sheet.getCell(0,i);/* pega os conteúdos das células */area.setArea(a1.getContents());getFacade().create(area);}FacesMessagemessage=newFacesMessage("Succesful",file.getFileName()+" is uploaded.");FacesContext.getCurrentInstance().addMessage(null,message);}else{FacesMessagemessage=newFacesMessage("Nao encontrado");FacesContext.getCurrentInstance().addMessage(null,message);}}
Você deixa a opção auto, desta maneira ele verifica a melhor opção da biblioteca para você
primefaces.UPLOADER
auto
Assim o primefaces reconhecerá o seu fileupload.
R
Rodrigo_Marden
@java_Gustavo Desculpe, não estava entendendo. Fiz a configuração como disse e coloquei a opção auto, porém mesmo assim estou recebendo um erro quando vou iniciar o servidor.
Você além de importar a biblioteca do primefaces, você tem que colocar no seu projeto as bibliotecas:
commons-fileupload-1.2.1.jar
commons-io-1.4.jar
Pois um dos erros que ele coloca é que não consegue encontrar a classe.
R
Rodrigo_Marden1 like
Sim, eu consegui identificar isso em outro tópico, mas obrigado pela resposta.
R
Rodrigo_Marden
@java_Gustavo
Com o código que eu postei, está retornando que o sistema não pode encontrar o arquivo especificado, sabe o que poderia ser?
Eu acredito que seja aqui, mas não sei o que devo mudar para que de certo.
J
java_Gustavo
Se o arquivo no não estiver no diretório raiz do projeto, provavelmente ele não esta retornando porque não esta encontrando o arquivo. Você tem que indicar o caminho e arquivo no construtor do File.