andre.froes:
Para upload:
ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
System.out.println(servletContext.getRealPath(""));
//vai mostrar a raiz do teu projeto;
Valeu andre.froes mostrou o caminho direitinho da aplocação mesmo. Obrigado
Em relação as fotos, como o user vai fazer um upload de uma imagem no meu web/inf eu teria que ter uma pasta e guardar as imagens naquele local, guardando o caminho respectivo de cada imagem no bd. Mas se eu fizer um deploy no server, eu não perderia esta pasta com as imagens???
Eu acabei optando por colocar a imagem no bd e exibi-la com um componente do primefaces graphicImage.
Depois de muitas tentativas e buscas em foruns eu consegui fazer a imagem ser mostrada no meu xhtml.
As imagens estão salvas em um campo Blob do meu MySQL.
No meu Xhtml, eu passo como parâmetro o id de uma entidade do banco de dados onde esta contida a imagem.
<p:graphicImage value="#{imagemBean.image}">
<f:param name="id" value="#{b.idEmpresa}" />
</p:graphicImage>
Aqui é onde eu estava errando eu mandava para o graphicImage um StreamedContent com a imagem direto, depois de muito pesquizar e analisar é que consegui achar a resposta, infelizmente nenhum exemplo do prime ou da documentação explicitam isso, ainda mais integrando com banco de dados.
public class Image implements Serializable{
private static final long serialVersionUID = 1L;
public StreamedContent getImage() throws IOException {
FacesContext context = FacesContext.getCurrentInstance();
if (context.getRenderResponse()) {
//Então, quando renderizar a view, retorna para o graphicImage um StreamedContent.
return new DefaultStreamedContent();
}
else {
// Quando o browser pedir uma imagem, retorne um StreamedContent com a imagem
String id = context.getExternalContext().getRequestParameterMap().get("id");
EmpresaDAO empresaDAO = new EmpresaDAOImpl();
Empresa empresa = empresaDAO.getById(Empresa.class, Integer.valueOf(id));
return new DefaultStreamedContent(new ByteArrayInputStream(empresa.getImagem()));
}
}
}
A vantagem é que agora minhas imagens ficam no banco de dados. Provavelmente, perderei performace do sistema ao fazer isso, bom vou ver como isso vai ficar aqui.
Dependendo do que acontecer posto aqui de novo.
[]s