2012-05-27 10 views
23

यह पहले मुझे लगता है कि ui:decorate कार्यात्मक रूप से ui:include जैसा ही है, सिवाय इसके कि आप शामिल फ़ाइल में ui:param और ui:define भी पास कर सकते हैं।यूई के बीच असली वैचारिक अंतर क्या है: सजाने और ui: शामिल हैं?

क्या मैं पागल हूँ?

संपादित करें: वास्तव में हालांकि आप एक ui:include फ़ाइल बहुत करने के लिए ui:param पारित कर सकते हैं, यह पता चला है मैं पहले से ही यह कर रहा हूं। हो सकता है कि आप ui:define भी पास कर सकें, मैं यहां जांच और संपादित करूंगा।

+0

मुझे यकीन नहीं है कि मैं आपकी ठोस समस्या को समझता हूं या नहीं। तो मैं कहूंगा, हाँ तुम पागल हो :) – BalusC

+0

@ बालससी मैं वास्तव में पागल हो सकता हूं, लेकिन मैं एक ठोस समस्या नहीं बता रहा हूं, सिर्फ एक सामान्य सिद्धांत। मैं यह पता लगाने की कोशिश कर रहा हूं कि इन दोनों संरचनाओं के बीच वास्तविक अंतर क्या है और मुझे कोई भी नहीं मिला। संभवतः ui: इसमें यूई का समर्थन नहीं है: परिभाषित करें, परीक्षण करते समय मुझे अन्य समस्याएं आ रही हैं। – EJP

+0

आह आप केवल वैचारिक अंतर के लिए पूछ रहे हैं? – BalusC

उत्तर

41

<ui:include> और <ui:decorate> के बीच मुख्य अंतर यह है कि <ui:decorate>, जबकि <ui:include> एक मौजूदा और पहले से ही-पूर्वनिर्धारित टेम्पलेट शामिल करने का इरादा है उपयोगकर्ता-निर्धारित टेम्पलेट घटकों की प्रविष्टि की अनुमति देने का इरादा है है।

इसका वास्तव में मतलब है कि <ui:decorate><ui:define> को अपने शरीर में उपयोगकर्ता द्वारा परिभाषित टेम्पलेट घटकों के लिए समर्थन देता है और इसे टेम्पलेट के अंदर <ui:insert> स्थान पर डाल सकता है।

/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> 

ध्यान दें कि यह की प्रत्येक कोशिका में अच्छी तरह से घटकों renders:

यहाँ दिखाने के लिए जहां यह किया जा सकता है एक -somewhat clumsy- उदाहरण है पैनल ग्रिड। दोबारा, यह विशेष उदाहरण बहुत बेकार है, मैंने अभी इसके बजाय tag file का उपयोग किया होगा। केवल अगर यह एक बड़ा खंड था, उदा। एक पूरा रूप जिसका उदा। इसका हेडर या फ़ूटर अनुकूलन योग्य होना चाहिए, फिर <ui:decorate> उचित होगा।

<ui:decorate> का एक और बड़ा लाभ यह है कि यह आपको टेम्पलेट के साथ एक समग्र घटक का उपयोग करने की अनुमति देता है। यह भी देखें Is it possible to use template with composite component in JSF 2?

+3

मुझे 'उपयोगकर्ता द्वारा परिभाषित टेम्पलेट घटक' और 'मौजूदा और पूर्व-परिभाषित टेम्पलेट' के बीच का अंतर नहीं समझता है। – EJP

+0

दिए गए '/ page.xhtml' उदाहरण में,' 'वह है जहां एंडुसर परिवर्तनीय टेम्पलेट घटकों को परिभाषित कर सकता है। – BalusC

+0

मैं उस भाग को समझता हूं, मैं सिर्फ उस भेद को समझ नहीं पा रहा हूं जिसे आप चित्रित कर रहे हैं। – EJP

संबंधित मुद्दे