Bạn cũng nên xem Facelets; có một số good introductory article trên DeveloperWorks.
Thẻ Facelets <ui:insert/>
có thể so sánh với thẻ ASP.NET <asp:ContentPlaceHolder/>
được sử dụng trong trang chính; nó cho phép bạn cung cấp nội dung mặc định cho vùng đó của trang, nhưng điều này có thể bị ghi đè.
Để điền mẫu Facelets vào một trang khác, bạn bắt đầu với phần tử <ui:composition/>
trỏ đến tệp mẫu. Điều này tương đương với việc khai báo thuộc tính MasterPageFile trong một trang ASP.NET.
Bên trong phần tử <ui:composition/>
, bạn sử dụng các phần tử <ui:define/>
để ghi đè các giá trị mặc định của mẫu, tương tự như cách sử dụng thẻ <asp:Content/>
. Các phần tử này có thể chứa bất kỳ loại nội dung nào - từ các chuỗi đơn giản đến các phần tử JSF.
Vì vậy, để mang lại cho nó tất cả cùng nhau ...
Trong master.xhtml:
<!-- HTML header content here -->
<ui:insert name="AreaOne">Default content for AreaOne</ui:insert>
<ui:insert name="AreaTwo">Default content for AreaTwo</ui:insert>
<!-- HTML footer content here -->
Trong trang.xhtml:
<ui:composition template="/WEB-INF/templates/master.xhtml">
<ui:define name="AreaOne">Here is some new content</ui:define>
<ui:define name="AreaTwo">
<p>Some new content here too</p>
</ui:define>
</ui:composition>
Và điều này sẽ làm như sau:
<!-- HTML header content here -->
Here is some new content
<p>Some new content here too</p>
<!-- HTML footer content here -->
Bạn cũng có được một số lợi ích khác với Facelets, chẳng hạn như khả năng tái sử dụng các thành phần trang web với dữ liệu khác nhau.
(Edited để cung cấp thêm thông tin.)