Kiedy powinienem używać h: outputLink zamiast h:commandLink?

Kiedy powinienem użyć <h:outputLink> zamiast <h:commandLink>?

Rozumiem, że commandLink generuje post HTTP; domyślam się, że outputLink wygeneruje get http. To powiedziawszy, większość JSF tutorial materiał przeczytałem używa commandLink (prawie?) wyłącznie.

Context: wdrażam mały projekt demonstracyjny, który pokazuje link nagłówka do strony użytkownika, podobnie jak Stack Overflow...

potrzebuje więcej jquery

...i nie jestem pewien czy commandLink (może używając ?faces-redirect=true dla bookmarkability) lub outputLink jest właściwym wyborem.

 125
Author: BalusC, 2010-11-30

2 answers

The <h:outputLink> renderuje pełnowartościowy element HTML <a> z odpowiednim adresem URL w atrybucie href, który uruchamia żądanie GET z funkcją bookmarkable. Nie może bezpośrednio wywoływać metody działania managed bean.

<h:outputLink value="destination.xhtml">link text</h:outputLink>

The <h:commandLink> renderuje element HTML <a> ze skryptem onclick, który przesyła (Ukryty) formularz POST i może wywołać metodę działania managed bean. Wymagane jest również umieszczenie go wewnątrz <h:form>.

<h:form>
    <h:commandLink value="link text" action="destination" />
</h:form>

Parametr ?faces-redirect=true na <h:commandLink>, który uruchamia przekierowanie po wpisie (zgodnie z wzorem Post-Redirect-Get ), tylko poprawia bookmarkability strony docelowej, gdy link jest faktycznie kliknięty( URL nie będzie już "jeden za"), ale nie zmienia href elementu <a> na pełny URL. Nadal pozostaje #.

<h:form>
    <h:commandLink value="link text" action="destination?faces-redirect=true" />
</h:form>

Od JSF 2.0, jest też <h:link> który może przyjmować identyfikator widoku (wynik przypadku nawigacji) zamiast adresu URL. Wygeneruje HTML <a> element wraz z odpowiednim adresem URL w href.

<h:link value="link text" outcome="destination" />

Więc, jeśli jest to dla czystej i bookmarkable strona-strona nawigacji, jak tak nazwa użytkownika link, następnie użyć <h:outputLink> lub <h:link>. Jest to również lepsze dla SEO, ponieważ boty zwykle nie szyfrują formularzy pocztowych ani kodu JS. Ponadto UX zostanie poprawiony, ponieważ strony są teraz bookmarkable, A adres URL nie jest już" jeden za".

W razie potrzeby można wykonać zadanie wstępnego przetwarzania w konstruktorze lub @PostConstruct z @RequestScoped lub @ViewScoped @ManagedBean który jest dołączony do strony docelowej, o której mowa. Możesz użyć @ManagedProperty lub <f:viewParam>, aby ustawić parametry GET jako właściwości bean.

Zobacz też:

 184
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:33:26

Widzę również, że ładowanie strony (wydajność) zajmuje dużo czasu przy użyciu h: commandLink niż H:link. h: link jest szybszy w porównaniu do h: commandLink

 4
Author: Ashok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-20 18:38:16