Agent_K
Outubro 20, 2018, 1:46pm
#1
Bom dia.
Preciso enviar múltiplos arquivos para o bean com o fileUpload e carregá-los na mesma página, consigo fazer isso com um único arquivo (sem criar List) mas quando crio um private List<StreamedContent>
os arquivos não são visualizados na página. Será que essa é a forma correta de se fazer?
<h:form enctype="multipart/form-data">
<p:fileUpload value="#{cadastroPessoaBean.file}"
label="Procurar..."
fileUploadListener="#{cadastroPessoaBean.doUpload}" auto="true"
showButtons="false" update="@form" />
<h:panelGroup id="companyImage">
<p:dataTable var="item" value="#{cadastroPessoaBean.imagem}">
<p:graphicImage value="#{item}" id="imagem" width="200"
cache="false" rendered="#{item != null}" />
</p:dataTable>
</h:panelGroup>
</h:form>
private UploadedFile file;
private List<StreamedContent> imagem = new ArrayList<>();
public void doUpload(FileUploadEvent event) {
try {
// imagem = new DefaultStreamedContent(event.getFile().getInputstream());
imagem.add(new DefaultStreamedContent(event.getFile().getInputstream()));
this.setFile(event.getFile());
System.out.println("Imagem: " + getImagem());
} catch (IOException e) {
// Tratamento de exceção.
}
}
Agent_K
Outubro 23, 2018, 5:57pm
#2
Boa tarde.
Consegui fazer aparecer as imagens em lista na tela logo após o upload(antes de armazenar em diretórios), porém as imagens que aparecem não são necessariamente as imagens que fiz o upload, pelo que vi há uma espécie de "cache "(que mesmo eu dando “restart” no tomcat) onde as imagens aparecem de forma aleatória entre as que eu estou upando no momento e aquelas que fiz o upload antes de restartar o tomcat.
Alguém saberia dizer o que está ocorrendo?
Segue como eu fiz:
.xhtml:
<h:form>
<p:fileUpload value="#{cadastroCarroBean.file}"
multiple="true" label="Procurar..."
fileUploadListener="#{cadastroCarroBean.doUpload}" auto="true"
showButtons="false" update="@form" />
<ui:repeat value="#{cadastroCarroBean.imageList}" var="image">
<p:panel header="#{image.id}">
<p:graphicImage value="#{cadastroCarroBean.productImage}"
height="100" width="100">
<f:param name="image_id" value="#{image.id}" />
</p:graphicImage>
</p:panel>
</ui:repeat>
</h:form>
Bean:
private HashMap<Integer, Image> images = new HashMap<Integer, Image>();
public void doUpload(FileUploadEvent event) throws IOException {
this.setFile(event.getFile());
cont++;
System.out.println("Cont: " + cont);
images.put(cont, new Image(cont, new DefaultStreamedContent(event.getFile().getInputstream())));
}
public StreamedContent getProductImage() throws IOException, SQLException {
String image_id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()
.get("image_id");
FacesContext context = FacesContext.getCurrentInstance();
if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
return new DefaultStreamedContent();
}
else {
return images.get(Integer.parseInt(image_id)).getImage();
}
}
public List<Image> getImageList() {
return new ArrayList<Image>(images.values());
}