2012-03-25 11 views
21

मैं बुक-markable करने के लिए पृष्ठों मेरी JSF अनुप्रयोगों परिवर्तित करने में प्रगति का एक बहुत बनाया है, लेकिन अगर मैं इसे सही तरीके से कर रहा हूँ मैं सोच रहा हूँ। एक सवाल यह है कि एफ के लिए एक सर्वोत्तम अभ्यास स्थान है: मेटाडाटा टैग?<ui: composition> templating का उपयोग करते समय, मुझे <f:metadata> कहां घोषित करना चाहिए?

मेरे ठेठ Facelets ग्राहक पेज इस तरह दिखता है:

<ui:composition template="./pattern.xhtml"> 

     <ui:define name="content"> 

      <f:metadata> 
       <f:viewParam name="userId" value="#{bean.userId}" /> 
       <f:viewParam name="startRecord" value="#{bean.startRecord}" /> 
       <f:viewParam name="pageSize" value="#{bean.pageSize}" /> 
       <f:viewParam name="sort" value="#{bean.sort}" /> 
      </f:metadata> 

      <h1>Data Table</h1> 

etc 

तो च: मेटाडाटा और बच्चे च: viewParam टैग मेरा पेज के शरीर में सामना होता है। मेरे pattern.xhtml टेम्पलेट भी एक खंड (नाम "शीर्षक") कि हैडर अनुभाग में इन टैग डाल सकता है। क्या उन्हें वहां रखा जाना चाहिए? क्या इससे कोई फर्क पड़ता है या क्या मैं कुछ दुष्प्रभावों के लिए स्थापित हूं जिसे मैंने अभी तक नहीं देखा है?

उत्तर

39

तकनीकी रूप से, इससे कोई फर्क नहीं पड़ता कि आप <f:metadata> को तब तक देखते हैं जब तक कि यह शीर्ष स्तर दृश्य में है (इसलिए, टेम्पलेट क्लाइंट में टेम्पलेट का उपयोग करते समय, और इस प्रकार मास्टर टेम्पलेट में नहीं)। जब दृश्य बन जाते हैं, मेटाडाटा मूल रूप से JSF घटक पेड़ का हिस्सा नहीं है, लेकिन दृश्य जड़ (जो आप ViewDeclarationLanguage#getViewMetadata() से एक पर-व्यू के आधार पर प्राप्त कर सकते हैं) के।

अधिकांश स्वयं-दस्तावेज दृश्य के शीर्ष पर <f:metadata> डालना होगा, ताकि आप दृश्य स्रोत कोड के आधे रास्ते या नीचे स्क्रॉल करने की आवश्यकता के बिना पहली नज़र में कोई मेटाडेटा देख सकें।

जब एक सादे पेज का उपयोग कर, बस इसे सही <h:head> से पहले डाल दिया।

<!DOCTYPE html> 
<html lang="en" 
    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" 
> 
    <f:metadata> 
     <f:viewParam name="userId" value="#{bean.userId}" /> 
     <f:viewParam name="startRecord" value="#{bean.startRecord}" /> 
     <f:viewParam name="pageSize" value="#{bean.pageSize}" /> 
     <f:viewParam name="sort" value="#{bean.sort}" /> 
    </f:metadata> 

    <h:head> 
     ... 
    </h:head> 

    <h:body> 
     ... 
    </h:body> 
</html> 

templating, की सिफारिश की दृष्टिकोण, के रूप में the <f:metadata> tag documentation में कहा गया है का उपयोग कर, एक अलग <ui:insert name="metadata"> मास्टर टेम्पलेट में घोषित करने और ग्राहक एक <ui:define name="metadata"> में <f:metadata> को परिभाषित करने देने के लिए किया जाएगा।

<ui:composition template="/WEB-INF/pattern.xhtml" 
    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" 
> 
    <ui:define name="metadata"> 
     <f:metadata> 
      <f:viewParam name="userId" value="#{bean.userId}" /> 
      <f:viewParam name="startRecord" value="#{bean.startRecord}" /> 
      <f:viewParam name="pageSize" value="#{bean.pageSize}" /> 
      <f:viewParam name="sort" value="#{bean.sort}" /> 
     </f:metadata> 
    </ui:define> 

    <ui:define name="content"> 
     <h1>Data Table</h1> 
     ... 
    </ui:define> 
</ui:composition> 
+0

मुझे कहना होगा कि मैं जो कर रहा हूं उससे थोड़ा साफ दिखता है। किसी भी तरह से यह ** ui बनाने के लिए नहीं हुआ: ** मेटाडेटा उद्देश्यों के लिए ** डालें, लेकिन अब मैं करूँगा। – AlanObject

+0

क्या इसका मतलब है कि 'f: मेटाडेटा' को पृष्ठ टेम्पलेट में उदाहरण के लिए पुन: प्रयोज्य बनाने के लिए नहीं रखा जा सकता है? तब क्या करना है यदि कुछ कार्यवाही होती है जिसे हम प्रस्तुत करने से पहले प्रत्येक दृश्य के लिए निष्पादित करना चाहते हैं? –

+1

@ एक्सट्रीम: बस '' का उपयोग करें। वास्तव में इसे ' 'के अंदर रखा जाना आवश्यक नहीं है। इन्हें भी देखें http://stackoverflow.com/questions/7343220/jsf-does-it-matter-whether-place-fevent-inside-fmetadata-or-not/7343242#7343242 – BalusC

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