A <h:outputLink>renderização é um <a>elemento HTML completo com a URL adequada no hrefatributo que aciona uma solicitação GET que pode ser marcada como favorito. Ele não pode chamar diretamente um método de ação do bean gerenciado.
<h:outputLink value="destination.xhtml">link text</h:outputLink>
O <h:commandLink>torna um HTML <a>elemento com um onclickscript que envia um formulário (oculto) POST e pode invocar um método de ação managed bean. Também é necessário ser colocado dentro de a <h:form>.
<h:form>
<h:commandLink value="link text" action="destination" />
</h:form>
O ?faces-redirect=trueparâmetro no <h:commandLink>, que aciona um redirecionamento após o POST (conforme o padrão Pós-Redirecionado-Obter ), apenas melhora a capacidade de marcação de favoritos da página de destino quando o link é realmente clicado (o URL não ficará mais "atrás") , mas ele não altera hrefo <a>elemento para ser um URL válido. Ainda permanece #.
<h:form>
<h:commandLink value="link text" action="destination?faces-redirect=true" />
</h:form>
Desde o JSF 2.0, também é <h:link>possível obter um ID de visualização (um resultado de caso de navegação) em vez de um URL. Ele irá gerar um <a>elemento HTML , bem como o URL apropriado href.
<h:link value="link text" outcome="destination" />
Portanto, se for para uma navegação página a página pura e com favoritos, como o link do nome de usuário SO, use <h:outputLink>ou <h:link>. Isso também é melhor para SEO, pois os bots geralmente não codificam os formulários POST nem o código JS. Além disso, o UX será aprimorado, pois as páginas agora podem ser marcadas como favoritos e o URL não está mais "atrasado".
Quando necessário, você pode executar o trabalho de pré-processamento no construtor ou @PostConstructem um @RequestScopedou @ViewScoped @ManagedBeanque esteja anexado à página de destino em questão. Você pode usar @ManagedPropertyou <f:viewParam>definir parâmetros GET como propriedades do bean.
Veja também:
UICommandcomponentes precisam entrar em umUIFormcomponente.