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