Kết <h:outputLink>xuất lại một <a>phần tử HTML hoàn toàn xứng đáng với URL thích hợp trong hrefthuộc tính kích hoạt yêu cầu GET có thể đánh dấu. Nó không thể gọi trực tiếp một phương thức hành động được quản lý.
<h:outputLink value="destination.xhtml">link text</h:outputLink>
Phần tử <h:commandLink>kết xuất thành <a>phần HTML với onclicktập lệnh gửi biểu mẫu POST (ẩn) và có thể gọi phương thức hành động bean được quản lý. Nó cũng được yêu cầu phải được đặt bên trong a <h:form>.
<h:form>
<h:commandLink value="link text" action="destination" />
</h:form>
Các ?faces-redirect=truethông số trên <h:commandLink>, mà gây nên một chuyển hướng sau khi POST (theo Post-Redirect-Nhận mẫu), chỉ cải thiện bookmarkability của trang mục tiêu khi liên kết được thực sự nhấp (URL sẽ không được "một đằng sau" nữa) , nhưng nó không thay đổi hrefthành <a>phần thành một URL hoàn toàn xứng đáng. Nó vẫn còn #.
<h:form>
<h:commandLink value="link text" action="destination?faces-redirect=true" />
</h:form>
Kể từ JSF 2.0, cũng <h:link>có thể có ID xem (kết quả trường hợp điều hướng) thay vì URL. Nó sẽ tạo ra một <a>phần tử HTML cũng như với URL thích hợp trong href.
<h:link value="link text" outcome="destination" />
Vì vậy, nếu đó là để điều hướng từ trang đến trang thuần túy và có thể đánh dấu như liên kết tên người dùng SO, thì hãy sử dụng <h:outputLink>hoặc <h:link>. Điều đó cũng tốt hơn cho SEO vì các bot thường không mã hóa các biểu mẫu POST cũng như mã JS. Ngoài ra, UX sẽ được cải thiện vì các trang hiện có thể đánh dấu được và URL không còn "đứng sau" nữa.
Khi cần thiết, bạn có thể thực hiện công việc tiền xử lý trong hàm tạo hoặc @PostConstructcủa một @RequestScopedhoặc @ViewScoped @ManagedBeanđược đính kèm với trang đích được đề cập. Bạn có thể sử dụng @ManagedPropertyhoặc <f:viewParam>để đặt tham số GET làm thuộc tính bean.
Xem thêm:
UICommandcác thành phần cần phải đi trong mộtUIFormthành phần.