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.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="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:composition id="composicao" template="/template.xhtml">
<!-- <ui:define name="title">
<h:outputText value="#{bundle.CreateAreasTitle}"> </h:outputText>
</ui:define> -->
<ui:define name="body">
<f:view>
<f:metadata>
<f:viewParam name="codigo" value="#{areasController.selected}" />
</f:metadata>
<h:outputScript name="js/locale-primefaces.js"/>
<h:outputScript name="js/jquery.maskMoney.js"/>
<script type="text/javascript">
$(document).ready(format);
function format() {
}
</script>
<ui:include src="/pagina/metaBaseAtivos/Modal.xhtml">
<ui:param name="editar" value="true" />
<ui:param name="comando" value="#{areasController.selecionarMetaBaseAtivosList}" />
</ui:include>
<ui:include src="/pagina/cr/Modal.xhtml">
<ui:param name="editar" value="true" />
<ui:param name="comando" value="#{areasController.selecionarCrList}" />
</ui:include>
<h:form id="form">
<p:panel styleClass="centralizado" header="#{bundle.CreateAreasTitle}" style="margin-top: 10px; width: 1024px;">
<h:panelGrid width="100%" columns="1">
<h:outputLabel value="#{bundle.CreateAreasLabel_area}" for="area" />
<p:inputText id="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:panel styleClass="centralizado" header="#{bundle.acoes}" style="margin-top: 10px; width: 1024px;">
<h:panelGrid style="text-align: center" columns="3" width="100%">
<p:commandButton id="botaoSalvar" icon="ui-icon-disk" action="#{areasController.create}" value="#{bundle.CreateAreasSaveLink}" ajax="false" />
<p:commandButton id="botaoConsultar" icon="ui-icon-search" action="#{areasController.prepareList}" value="#{bundle.CreateAreasShowAllLink}" ajax="false" immediate="true"/>
<p:commandButton id="botaoNovo" icon="ui-icon-document" value="#{bundle.novo}" action="#{areasController.prepareCreate}" ajax="false" immediate="true"/>
</h:panelGrid>
</p:panel>
</h:form>
<h:form enctype="multipart/form-data" id="uploadExcel">
<p:panel styleClass="centralizado" >
<p:growl id="messages" showDetail="true"/>
<p:fileUpload label="Escolher" value="#{areasController.file}" mode="simple" skinSimple="true" />
<p:commandButton value="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:
public UploadedFile getFile() {
return file;
}
public void setFile(UploadedFile file) {
this.file = file;
}
public void upload() throws IOException, BiffException{
Areas area = new Areas();
if(file != null) {
/* pega o arquiivo do Excel */
Workbook workbook = Workbook.getWorkbook(new File(getFile().getFileName()));
/* pega a primeira planilha dentro do arquivo XLS */
Sheet sheet = workbook.getSheet(0);
//Pega a quantidade de linhas da planilha
int linhas = sheet.getRows();
for (int i = 0; i < linhas; i++) {
/* pega os valores das células como se numa matriz */
Cell a1 = sheet.getCell(0,i);
/* pega os conteúdos das células */
area.setArea(a1.getContents());
getFacade().create(area);
}
FacesMessage message = new FacesMessage("Succesful", file.getFileName() + " is uploaded.");
FacesContext.getCurrentInstance().addMessage(null, message);
} else {
FacesMessage message = new FacesMessage("Nao encontrado");
FacesContext.getCurrentInstance().addMessage(null, message);
}
}
Você já configurou o web.xml para reconhecer o fileUpload o primefaces?
Qualquer dúvida dê uma olhada neste link:
Seria apenas adicionar isso ao web.xml? Pois fiz isso e não mudou nada.
<context-param>
<param-name>primefaces.UPLOADER</param-name>
<param-value>auto|native|commons</param-value>
</context-param>
<filter>
<filter-name>FileUploadFilter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>FileUploadFilter</filter-name>
<servlet-name>FacesServlet</servlet-name>
</filter-mapping>
no trecho do primefaces.UPLOADER você escolheu que opção?
Eu deixei as duas, achei que por ser tags diferentes ele faria a seleção correta.
Para ele escolher a melhor opção para você é só deixar auto.
<context-param>
<param-name>primefaces.UPLOADER</param-name>
<param-value>auto|native|commons</param-value>
</context-param>
<filter>
<filter-name>FileUploadFilter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>FileUploadFilter</filter-name>
<servlet-name>FacesServlet</servlet-name>
</filter-mapping>
Assim?
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.
@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.
Erro:
Grave: WebModule[/SGT-SGI]Exception starting filter FileUploadFilter
java.lang.InstantiationException
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:127)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4980)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:5623)
at com.sun.enterprise.web.WebModule.start(WebModule.java:540)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:917)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:900)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:684)
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2044)
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1690)
at com.sun.enterprise.web.WebApplication.start(WebApplication.java:107)
at org.glassfish.internal.data.EngineRef.start(EngineRef.java:122)
at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:291)
at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:352)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:500)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:540)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:536)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:360)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:535)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:566)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:558)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:360)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:557)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1465)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:110)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1847)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1723)
at org.glassfish.deployment.admin.ReDeployCommand.execute(ReDeployCommand.java:131)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:540)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:536)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:360)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:535)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:566)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:558)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:360)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:557)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1465)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:110)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1847)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1723)
at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534)
at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224)
at org.glassfish.grizzly.http.server.StaticHttpHandlerBase.service(StaticHttpHandlerBase.java:190)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:463)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:168)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:242)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:539)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:593)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:573)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.sun.enterprise.container.common.spi.util.InjectionException: Error creating managed object for class: class org.primefaces.webapp.filter.FileUploadFilter
at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.createManagedObject(InjectionManagerImpl.java:352)
at com.sun.enterprise.web.WebContainer.createFilterInstance(WebContainer.java:765)
at com.sun.enterprise.web.WebModule.createFilterInstance(WebModule.java:1992)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:256)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:123)
... 66 more
Caused by: org.jboss.weld.resources.spi.ResourceLoadingException: Error while loading class org.primefaces.webapp.filter.FileUploadFilter
at org.jboss.weld.resources.ClassTransformer.getBackedAnnotatedType(ClassTransformer.java:183)
at org.jboss.weld.resources.ClassTransformer.getBackedAnnotatedType(ClassTransformer.java:191)
at org.jboss.weld.manager.BeanManagerImpl.createAnnotatedType(BeanManagerImpl.java:1118)
at org.glassfish.weld.services.JCDIServiceImpl.createManagedObject(JCDIServiceImpl.java:447)
at org.glassfish.weld.services.JCDIServiceImpl.createManagedObject(JCDIServiceImpl.java:317)
at com.sun.enterprise.container.common.impl.managedbean.ManagedBeanManagerImpl.createManagedBean(ManagedBeanManagerImpl.java:477)
at com.sun.enterprise.container.common.impl.managedbean.ManagedBeanManagerImpl.createManagedBean(ManagedBeanManagerImpl.java:430)
at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.createManagedObject(InjectionManagerImpl.java:336)
... 70 more
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
at java.lang.Class.getDeclaredConstructors(Class.java:2020)
at org.jboss.weld.annotated.slim.backed.SecurityActions.getDeclaredConstructors(SecurityActions.java:57)
at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedConstructors.computeValue(BackedAnnotatedType.java:166)
at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedConstructors.computeValue(BackedAnnotatedType.java:163)
at org.jboss.weld.util.LazyValueHolder.get(LazyValueHolder.java:46)
at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$EagerlyInitializedLazyValueHolder.<init>(BackedAnnotatedType.java:159)
at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedConstructors.<init>(BackedAnnotatedType.java:163)
at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedConstructors.<init>(BackedAnnotatedType.java:163)
at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType.<init>(BackedAnnotatedType.java:64)
at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType.of(BackedAnnotatedType.java:47)
at org.jboss.weld.resources.ClassTransformer$TransformClassToBackedAnnotatedType.apply(ClassTransformer.java:81)
at org.jboss.weld.resources.ClassTransformer$TransformClassToBackedAnnotatedType.apply(ClassTransformer.java:76)
at org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.lambda$null$0(ReentrantMapBackedComputingCache.java:55)
at org.jboss.weld.util.WeakLazyValueHolder$1.computeValue(WeakLazyValueHolder.java:35)
at org.jboss.weld.util.WeakLazyValueHolder.get(WeakLazyValueHolder.java:53)
at org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.getValue(ReentrantMapBackedComputingCache.java:72)
at org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.getCastValue(ReentrantMapBackedComputingCache.java:78)
at org.jboss.weld.resources.ClassTransformer.getBackedAnnotatedType(ClassTransformer.java:174)
... 77 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1621)
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1471)
... 97 more
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.
1 curtida
Sim, eu consegui identificar isso em outro tópico, mas obrigado pela resposta.
1 curtida
@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.
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.