Sự khác biệt chính giữa <ui:include>
và <ui:decorate>
là <ui:decorate>
được thiết kế để cho phép chèn các thành phần mẫu do người dùng định nghĩa, trong khi <ui:include>
được thiết kế để bao gồm một mẫu hiện tại và đã-được xác định trước.
Điều này thực sự có nghĩa là <ui:decorate>
hỗ trợ <ui:define>
cho các thành phần mẫu do người dùng xác định trong phần thân và có thể chèn nó ở vị trí <ui:insert>
bên trong mẫu.
Dưới đây là một ví dụ clumsy- -somewhat để hiển thị nơi nó có thể được sử dụng:
/WEB-INF/templates/field.xhtml
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<h:outputLabel for="#{id}" value="#{label}" />
<ui:insert name="input" />
<h:message id="#{id}_message" for="#{id}" />
</ui:composition>
/page.xhtml
<h:panelGrid columns="3">
<ui:decorate template="/WEB-INF/templates/field.xhtml">
<ui:param name="label" value="Foo" />
<ui:param name="id" value="foo" />
<ui:define name="input">
<h:inputText id="foo" value="#{bean.foo}" required="true" />
</ui:define>
</ui:decorate>
<ui:decorate template="/WEB-INF/templates/field.xhtml">
<ui:param name="label" value="Bar" />
<ui:param name="id" value="bar" />
<ui:define name="input">
<h:selectBooleanCheckbox id="bar" value="#{bean.bar}" required="true" />
</ui:define>
</ui:decorate>
...
</h:panelGrid>
Lưu ý rằng nó ám chỉ rằng các thành phần độc đáo trong mỗi tế bào của lưới bảng điều khiển. Một lần nữa, ví dụ cụ thể này là khá vụng về, tôi chỉ sử dụng một số tag file thay thế. Chỉ khi đó là phần lớn hơn, ví dụ: một dạng toàn bộ, ví dụ: đầu trang hoặc chân trang của nó phải có thể tùy chỉnh, khi đó, <ui:decorate>
sẽ phù hợp.
Một lợi thế lớn khác của <ui:decorate>
là nó cho phép bạn sử dụng thành phần tổng hợp với mẫu. Xem thêm Is it possible to use template with composite component in JSF 2?
Tôi không chắc liệu tôi có hiểu vấn đề cụ thể của bạn hay không. Vì vậy, tôi muốn nói, có bạn đang điên :) – BalusC
@ BalusC Tôi thực sự có thể bị điên, nhưng tôi không nói một vấn đề cụ thể, chỉ là một nguyên tắc chung. Tôi đã cố gắng tìm ra sự khác biệt thực sự tồn tại giữa hai cấu trúc này và tôi không thể tìm thấy bất kỳ thứ gì. Có thể ui: include không hỗ trợ ui: define, tôi đã gặp phải các vấn đề khác trong khi kiểm tra. – EJP
Ah bạn chỉ hỏi về sự khác biệt về khái niệm? – BalusC