Bom, o problema é o seguinte: em minha aplicação web, possuo uma página que abre alguns documentos PDFs que estão locais, o botão para abrir esses PDFs está dentro de uma tabela, da seguinte maneira:
<h:commandLink action="#{publicacoes_RGFBean.carregaVisualizacao(obj.arquivo, obj.texto)}"
immediate="true"
target="_blank"
title="Visualizar documento" >
<h:graphicImage name="/images/lupa_24x24.png" />
</h:commandLink>
O metodo no bean testa se ‘‘obj.arquivo’’ está nulo ou vazio antes de chamar a rotina para carregar esse arquivo, caso contrario ele mostraria uma mensagem pro usuário, conforme o código abaixo:
public void carregaVisualizacao(String doc, String descricao) throws IOException {
if (doc == null || "".equals(doc)) {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_ERROR,
"Desculpe", "Não foi possível localizar o arquivo em nossos servidores"));
} else {
Path caminho = Paths.get(path + doc);
byte[] data = Files.readAllBytes(caminho);
new PublicacoesXmlBO().visualizaArquivo(data, descricao);
}
}
O problema é que quando esse arquivo é nulo ou vazio e entra na condição, a mensagem não é mostrada e ainda por cima a página é redirecionada para outra no caso a minha index.xhtml, acredito que o problema esta no xhtml, mas se puderem me dar uma luz, eu agradeço.