Ola a todos tenho o seguinte problema estou tentando implementar com primefaces uma tela tela te upload de arquivos, só que quando executo passo o arquivo e clico para fazer o upload ele me retorna NullPointerException já tentei pegar o nome do arquivo com o value em uma variável mais também não resolveu se alguém puder me ajudar fico grato abaixo o código do prime faces e minha classe de upload
publicclassFileUploadView{privateStringarquivo;publicStringgetArquivo(){returnarquivo;}publicvoidsetArquivo(Stringarquivo){this.arquivo=arquivo;}publicvoidhandleFileUpload(FileUploadEventevent)throwsFileNotFoundException,IOException{try{ExternalContextexternalContext=FacesContext.getCurrentInstance().getExternalContext();HttpServletResponseresponse=(HttpServletResponse)externalContext.getResponse();FacesContextaFacesContext=FacesContext.getCurrentInstance();ServletContextcontext=(ServletContext)aFacesContext.getExternalContext().getContext();StringrealPath=context.getRealPath("/");byte[]arquivo=event.getFile().getContents();Stringcaminho=realPath+"/scripts/"+event.getFile().getFileName();try(// esse trecho grava o arquivo no diretórioFileOutputStreamfos=newFileOutputStream(caminho)){fos.write(arquivo);FacesMessagemessage=newFacesMessage("Succesful",event.getFile().getFileName()+" is uploaded.");FacesContext.getCurrentInstance().addMessage(null,message);// mensagem pra saber se ouve sucesso}}catch(Exceptionex){System.out.println("Erro no upload de imagem"+ex);}}}
se eu removo essas linhas e passo o o diretório na minha variável caminho funciona, só que eu preciso que ele pegue o caminho dentro do meu projeto por exemplo pasta scripts que esta dentro do meu projeto sem pegar todo o caminho por exemplo C:\etc\scripts poque as ela nem sempre vai estar no C: ou algo do tipo
R
Renato_Wilder
Consegui resolver quase todos os problemas agora só me resta um, tenho a tela abaixo:
em um form eu tenho o campo onde eu informo o nome e crio uma pasta com esse nome, no segundo form um selectedOneMenu onde lista as pastas que criei no primeiro form, agora meu problema esta no form de upload porque quando eu seleciono uma pasta no selectedOneMenu e clico em fazer upload do arquivo, ele não esta fazendo upload, a variável onde armazeno o nome da pasta esta ficando null, abaixo a minha classe que faz essas operações:
privateStringarquivo;privateStringpasta;privateStringdestino;publicStringgetArquivo(){returnarquivo;}publicvoidsetArquivo(Stringarquivo){this.arquivo=arquivo;}publicStringgetPasta(){returnpasta;}publicvoidsetPasta(Stringpasta){this.pasta=pasta;}publicStringgetDestino(){returndestino;}publicvoidsetDestino(Stringdestino){this.destino=destino;}publicvoidcriarDiretorioMacro()throwsSQLException{DirControledir=newDirControle();Stringdirectory=dir.selectedDir_CB().toString().replace("[","").replace("]","");try{Filediretorio=newFile(directory+"//"+getPasta());diretorio.mkdir();}catch(Exceptionex){}}publicvoidhandleFileUpload(FileUploadEventevent)throwsSQLException{DirControledir=newDirControle();Stringdirectory=dir.selectedDir_CB().toString().replace("[","").replace("]","");try{byte[]arquivo=event.getFile().getContents();Stringcaminho=directory+"\\"+getDestino()+"\\"+event.getFile().getFileName();try(// esse trecho grava o arquivo no diretórioFileOutputStreamfos=newFileOutputStream(caminho)){fos.write(arquivo);FacesMessagemessage=newFacesMessage("Succesful",event.getFile().getFileName()+" is uploaded.");FacesContext.getCurrentInstance().addMessage(null,message);// mensagem pra saber se ouve sucesso}}catch(Exceptionex){ex.printStackTrace();System.out.println(ex);}}