[JAVA/XHTML] Problema ao abrir um PDF

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.

Ainda estou nesse problema, se alguém puder me ajudar por favor…

Olá,

Aqui a documentação da tag h:commandLink : http://docs.oracle.com/javaee/7/javaserver-faces-2-2/vdldocs-facelets/h/commandLink.html

Abaixo a definição do atributo action:
Name: action
Required: false
Request-time: false
Type: javax.el.MethodExpression
(signature must match java.lang.Object action())
Description: MethodExpression representing the application action to invoke when this component is activated by the user. The expression must evaluate to a public method that takes no parameters, and returns an Object (the toString() of which is called to derive the logical outcome) which is passed to the NavigationHandler for this application.

Então conforme citado acima, o método deve ser público sem parâmetros e retorna um objeto String que contém a página que será exibida.

Veja o seguinte item do Java EE 7 Tutorial: 10.2.5.2 Rendering a Link with the h:commandLink Tag

Se você quiser carregar arquivos que estão no sistema de arquivo mas fora da sua aplicação web ou que esteja em um banco de dados, então sugiro que utilize: FileServlet, o OmniFaces também tem uma implementação do FileServlet.