Esse código funciona... eu já havia testado, mas ele repete 3 vezes o mesmo arquivo.... No meu caso, quando eu envio o arquivo, eu salvo no banco, o caminho do arquivo.
Eu tentei portanto, esse código com a seguinte alteração.
Não gera erro, mas também não lista os arquivos. Acredito que o poblema seja que o código é executado no construtor. Assim que abro a página onde irá aparecer os download, ele já busca o código, antes de eu selecionar o usuário para buscar os respectivos arquivos. E quando eu seleciono o usuário, ele não faz a busca de novo...
H
hmsilva
Voce pode colocar a lógica de carga de arquivo num metodo:
publicvoidcarregaArquivos(){files=newArrayList<StreamedContent>();listaArquivosEnviados=exames.arquivosenviados(idUsuario);// Busca no banco, o caminho dos arquivos enviados. for(TbExamesEnviadosx:listaArquivosEnviados){for(inti=0;i<listaArquivosEnviados.size();i++){InputStreamstream=((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()).getResourceAsStream("/exames/"+x.getCaminho());file=newDefaultStreamedContent(stream,"application/download",x.getCaminho());//O nome a ser exebido, será o próprio nome do arquivo files.add(file);}}}
E no seu xhtml vc coloca um listener na seleção do usuario pra chamar o metodo pra carregar os aquivos. E atualiza o componente onde a lista de arquivos está.
A
Aanderson
hmsilva:
Voce pode colocar a lógica de carga de arquivo num metodo:
publicvoidcarregaArquivos(){files=newArrayList<StreamedContent>();listaArquivosEnviados=exames.arquivosenviados(idUsuario);// Busca no banco, o caminho dos arquivos enviados. for(TbExamesEnviadosx:listaArquivosEnviados){for(inti=0;i<listaArquivosEnviados.size();i++){InputStreamstream=((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()).getResourceAsStream("/exames/"+x.getCaminho());file=newDefaultStreamedContent(stream,"application/download",x.getCaminho());//O nome a ser exebido, será o próprio nome do arquivo files.add(file);}}}
E no seu xhtml vc coloca um listener na seleção do usuario pra chamar o metodo pra carregar os aquivos. E atualiza o componente onde a lista de arquivos está.
Cara, estava aqui fazendo testes, debbugando e coisa e tal.
Quando seleciono um usuário, ele chama o carregaArquivos() e traz todos os dados certinhos. Essa tela, onde os arquivos deveriam aparecer, é composta com várias tabs...
Quando abro a tab específica dos arquivos enviados, ele me traz uma nova instância das variáveis da classe e por consequência, não mostra os dados na tela, pois o listaArquivosEnviados fica nulo....