[quote=rof20004]voce poderia fazer assim:
<p:commandButton action="#{certificadoBean.cadastrar}" ajax="true" value="Cadastrar" update="messages" />
Ai em cima como voce percebe, estou dando update no p:messages, ja que é so isso que voce quer mostrar certo ? Nao preciso atualizar o painel todo.
e la no java voce teria que por assim:
[code]
public void cadastrar () throws KeyStoreException, CADoesntExistsException, NoSuchAlgorithmException, CertificateException, IOException
{
KeyStore keyStore = controlador.cadastrar(certificadoModel);
System.out.println("Bean Class: " + certificadoModel.getMensagem());
FacesContext fc = FacesContext.getCurrentInstance();
if (certificadoModel.getMensagem() == "Cadastro Realizado com Sucesso!!")
{
ExternalContext ec = fc.getExternalContext();
ec.responseReset();
ec.setResponseContentType("application/x-pkcs12");
//ec.setResponseContentLength(contentLength);
ec.setResponseHeader("Content-Disposition", "attachment; filename=\"" + certificadoModel.getUsername() + ".p12" + "\"");
OutputStream output = ec.getResponseOutputStream();
keyStore.store(output, certificadoModel.getPassword().toCharArray());
fc.responseComplete();
fc.addMessage(null, new FacesMessage("", certificadoModel.getMensagem()));
controlador.clean(certificadoModel);
}else
fc.addMessage("messages", new FacesMessage("", certificadoModel.getMensagem())); // Observe que coloquei no CONTEXT o ID do p:messages.
controlador.clean(certificadoModel);
}
} [/code]
Abraços.
Obs.: Coloquei ajax true no botao, assim ele nao faz nenhum submit.
[/quote]
É o seguinte, se eu deixo o ajax como true, ele não retorna o arquivo para download, mas mesmo false ou true, não retorna a mensagem. Pelo que li uma vez, não me lembro onde, acho que o ExternalContext não funciona com o ajax, deve ser por isso o problema do arquivo não retornar, mas a mensagem continua um mistério.
Obs:. A mensagem funciona normalmente com mensagens de erro, tipo usuário ja cadastrado no db, vai ver o fc.responseComplete() não funciona com o fc.addMessage ou da algum conflito.