Estou iniciando agora em Struts 2, dando manutenção e estou com problema para fazer download de arquivo carregado do banco de dados.
Código da Página:
Função baixarArquivoAnexo:
O link do arqiuvo aparece na página, só que ao clicar ocorre erro de NullPointer
Pesquisei bastante e achei muitos tutoriais de fazer upload, e 1 pra fazer download usando o Request and Response e usando download do Struts 1.
Se alguém souber resolver isso pelo struts 2 eu agradeço. Ou se não tem jeito mesmo e tenho que criar uma Access Request.
Obrigado
Consegui resolver o problema (não consigo criar uma resposta, sempre fica pedindo login).
Na action que tem o evento de baixar arquivo criei atributos de response e request, implementado de ServletRequestAware, ServletResponseAware.
Dai usei o response para enviar o arquivo para download. segue o código:
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
public class AnexoAction extends DocumentoAction implements ServletRequestAware, ServletResponseAware {
// Código para pegar Request e response
private HttpServletRequest request;
private HttpServletResponse response;
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public HttpServletRequest getServletRequest() {
return request;
}
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
public HttpServletResponse getServletResponse() {
return response;
}
public void baixarArquivoAnexo() {
Anexo anexo = (Anexo) getDao().findById(Anexo.class, getId());
this.getServletResponse().setContentType("application/octet-stream");
this.getServletResponse().setHeader("Content-Disposition", "attachment; filename=" + anexo.getNomeArquivoAnexo());
try {
this.getServletResponse().getOutputStream().write(anexo.getBytesArquivoAnexo());
this.getServletResponse().getOutputStream().flush();
} catch (Exception e) {
System.out.println("Operação cancelada pelo usuário!");
}
return;
}
}