2012-11-20 12 views
6

मैं ओरेकल के जेएसएफ 2.2 कार्यान्वयन के 2.2.0-एम05 मील का पत्थर निर्माण के साथ प्राइमफेस 3.4.1 का उपयोग कर रहा हूं। मैं निर्भरता इंजेक्शन और कुछ एओपी के लिए स्प्रिंग 3.1 का भी उपयोग कर रहा हूं।प्रबंधित बीन में यूआई घटक को बाध्य किए बिना मैं प्राइमफेस पेड़ (मार्क-अप या प्रोग्रामेटिक रूप से) में वर्तमान ट्री नोड का उपयोग कैसे करूं?

मैं लॉजिकल फ़िल्टर नियमों के एक समग्र को प्रदर्शित करने के लिए प्राइमफेस पेड़ घटक का उपयोग करने की कोशिश कर रहा हूं (और उपयोगकर्ता को समग्र संरचना के भीतर किसी भी गहराई पर समग्र/पत्ता नोड्स बनाने की अनुमति देता है)।

उदाहरण समग्र फिल्टर:

<p:tree value="#{form.rootComponent}" var="filterComponent" animate="true"> 

    <p:treeNode type="composite"> 
     <!-- some composite specific components --> 
    </p:treeNode> 

    <p:treeNode type="leaf"> 
     <!-- some leaf specific components --> 
    </p:treeNode> 

</p:tree> 
:

या (परियोजना = 'someProject')

उदाहरण पेड़ मार्कअप ((स्थान = 'कैलोरी') और (विवरण 'परीक्षण') शामिल हैं)

हालांकि तत्व पर "मान" विशेषता रूट ट्रीनोड (एक प्रबंधित बीन से पुनर्प्राप्त) स्वीकार करती है, "var" विशेषता नोड के बजाए वर्तमान पेड़ नोड में मौजूद वास्तविक डेटा को इंगित करती है। मैं वर्तमान पेड़ नोड तक पहुंचने का एक तरीका चाहूंगा, न कि इसके लपेटे गए डेटा, या तो मार्क-अप या प्रोग्रामेटिक रूप से में।

यदि मैं इसे मार्क-अप में एक्सेस कर सकता हूं, तो मैं इसे एक प्रबंधित बीन के लिए विधि तर्क के रूप में पास कर सकता हूं। यदि मार्क-अप में इसे एक्सेस करने का कोई तरीका नहीं है, तो क्या मैं मॉडल ऑब्जेक्ट के माध्यम से प्रत्यक्ष प्रोग्रामेटिक पहुंच प्राप्त कर सकता हूं? (संभवतः अंतर्निहित पेड़ मॉडल तक पहुंच प्राप्त करके?)।

मुझे पता है कि आप एक अभिव्यक्ति का उपयोग कर सकते हैं जो डेटा संग्रह के बजाय अंतर्निहित डेटामोडेल को सीधे एच के "मान" के रूप में हल करता है: डेटाटेबल, लेकिन मेरा मानना ​​है कि आप केवल रूट नोड को पी: पेड़ के साथ ही उपयोग कर सकते हैं।

मैं लपेटा गया डेटा ऑब्जेक्ट में पेड़ नोड का संदर्भ शामिल कर सकता हूं, लेकिन यदि संभव हो तो मैं वास्तव में बदसूरत परिपत्र संदर्भों से बचूंगा।

एक बेहतर विकल्प की अनुपस्थिति में, मैंने "बाध्यकारी" विशेषता का उपयोग करके पी: पेड़ तत्व को सीधे प्रबंधित बीन (पेड़ पी: पेड़ के लिए यूआईसीओम्पोनेंट क्लास) में एक वृक्ष उदाहरण में बांधने की कोशिश की, जो अनुमति देता है मुझे getTreeNode() विधि के माध्यम से वर्तमान नोड तक पहुंचने के लिए, लेकिन मैं प्रबंधित बीन्स और घटकों को देखने के बीच जीवन चक्र विसंगति को देखते हुए इसे टालना पसंद करूंगा। यह पूरी तरह से काम नहीं कर रहा है, और मुझे लगता है कि एक बेहतर, सरल समाधान होना चाहिए।

मैंने संयुक्त भाग को संभालने के लिए नेस्टेड डेटा टेबल के साथ एक जेएसएफ डेटा तालिका का उपयोग करने का भी प्रयास किया - लेकिन इसके खिलाफ निर्णय लिया कि जेएसएफ मार्कअप के भीतर सशर्त रूप से रिकर्सिव संरचना बनाने में कठिनाई दी गई है (मुझे विश्वास है कि "प्रस्तुत" विशेषता का मूल्यांकन नहीं किया जाता है निर्माण समय पर देखते हैं इसलिए अनंत रिकर्सन से बचना मुश्किल है)।

बस स्पष्ट करने के लिए, मुझे केवल वर्तमान वृक्ष नोड में रुचि है जिसमें "var" द्वारा संदर्भित डेटा है, न कि वर्तमान में उपयोगकर्ता द्वारा चुना गया नोड।

+0

एक नोड का चयन करने के साथ, आप वर्तमान पेड़ नोड कैसे प्राप्त करते हैं? मुझे आपका प्रश्न समझ में नहीं आया। – neni

+0

क्या आपने अपने मार्कअप में # {घटक} का उपयोग करने का प्रयास किया है? यह वर्तमान घटक को हल करने के लिए माना जाता है, अपने मामले में पेड़ नोड होना चाहिए – rootkit

उत्तर

0

ठीक है, पेड़ घटक में "चयन" नामक एक विशेषता है। आपको केवल प्रबंधित बीन विधि का संदर्भ प्रदान करने की आवश्यकता है।

उदाहरण के लिए, अपने एक्सएचटीएमएल में विशेषता नीचे दिए तरीक़े को परिभाषित:

selection="#{myManagedBean.selectedNode}"

और इसके बाद के संस्करण विशेषता की परिभाषा के साथ, आप प्रबंधित सेम कि संदर्भ में हमेशा की तरह सेटर और गेटर तरीकों प्रदान करना होगा org.primefaces.model.TreeNode उदाहरण के लिए।

6

पीएफ लीड ने पीएफ 5.1.10/5.2 में पी: पेड़टेबल (डुनो अगर पी: पेड़ शामिल है) के लिए "नोडवार" नामक एक नई विशेषता को जोड़ा है। यह सुविधा इसके डेटा के बजाय वास्तविक TreeNode को पकड़ने की अनुमति देगी। इसलिए, अब कोई नोड पर अतिरिक्त विधि कॉल कर सकता है, जैसे TreeNode.isLeaf()।

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

  • कोई संबंधित समस्या नहीं^_^