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 href
thuộ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 onclick
tậ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=true
thô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 href
thà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 @PostConstruct
của một @RequestScoped
hoặc @ViewScoped
@ManagedBean
được đính kèm với trang đích được đề cập. Bạn có thể sử dụng @ManagedProperty
hoặc <f:viewParam>
để đặt tham số GET làm thuộc tính bean.
Xem thêm:
UICommand
các thành phần cần phải đi trong mộtUIForm
thành phần.