A <h:outputLink>
renderização é um <a>
elemento HTML completo com a URL adequada no href
atributo 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 onclick
script 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=true
parâ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 href
o <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 @PostConstruct
em um @RequestScoped
ou @ViewScoped
@ManagedBean
que esteja anexado à página de destino em questão. Você pode usar @ManagedProperty
ou <f:viewParam>
definir parâmetros GET como propriedades do bean.
Veja também:
UICommand
componentes precisam entrar em umUIForm
componente.h:outputLink
ouh:link
para links. SEO não deve ser subestimado. A propósito, para obter bons URLs semelhantes a REST, como aqui no SO, dê uma olhada no PrettyFaces .h:link
leva JSF ID vista (por exemplopage
) como valor eh:outputLink
leva um URL real (por exemplo,/page.xhtml
ou/page.jsf
, ou outra dependendo do seuFacesServlet
mapeamento) como valor. A codificação de URL acontece de qualquer maneira nos dois casos. A propósito, não há diferença entre o comportamento de renderização do EL no texto do modelo#{...}
eh:outputText
. Ambos escapam às entidades XML predefinidas (não, isso não é o mesmo que a codificação de URL). Oh:outputText
único oferece mais atributos comoid
,styleClass
etc para controlar o componente e / ou marcação.<a>
elemento, nada mais, nada fanciness, nenhum código JS, etc.Também vejo que o carregamento da página (desempenho) demora muito tempo usando h: commandLink do que h: link. h: link é mais rápido em comparação com h: commandLink
fonte