2010-10-20 15 views
12

के लिए डेटामोडेल पर डेटामोडेल का उपयोग करने में कोई फायदा है डेटामैडेल का एक लाभ यह है कि आपको तालिका में पंक्ति अनुक्रमणिका मिलती है। लेकिन मुझे यह अनावश्यक लगता है, क्योंकि आप एच: डेटाटेबल के var विशेषता का उपयोग कर वर्तमान पंक्ति तत्व तक पहुंच सकते हैं। और मुझे अक्सर डेटामैडेल में सूची में कनवर्ट करने की आवश्यकता होती है, क्योंकि कुछ घटक पुस्तकालय एक सूची की अपेक्षा कर रहे हैं। मैं पूरी तरह से डेटामोडेल छोड़ने की सोच रहा हूं। तुम क्या सोचते हो? क्या डेटामोडेल के कोई फायदे हैं। जेएसएफ 2.0: सीआरयूडी अनुप्रयोगों

धन्यवाद, थियो

उत्तर

9

एक और लाभ यह है कि आप DataModel#getRowData() द्वारा वर्तमान में संसाधित पंक्ति प्राप्त कर सकते हैं। यह विशेष रूप से उपयोगी होता है जब आप ईवेंट के दौरान वर्तमान पंक्ति तक पहुंच बनाना चाहते हैं (रूपांतरण/सत्यापन, मूल्य परिवर्तन श्रोता, क्रिया विधि, आदि)।

उदा।

<h:column> 
    <h:commandButton value="edit" action="#{bean.edit}" /> 
</h:column> 

public String edit() { 
    Item item = dataModel.getRowData(); 
    // ... 
} 

साथ आप एक बुनियादी CRUD उदाहरण जो this blog में इस का इस्तेमाल करता है पा सकते हैं। यदि आप DataModel का उपयोग नहीं कर रहे थे, तो आपको इसके लिए f:setPropertyActionListener का उपयोग करने के लिए मजबूर होना होगा जो केवल बेकार है और वैधकर्ता/कनवर्टर या मूल्य परिवर्तन श्रोता के लिए काम नहीं करेगा। ईएल 2.2 के बाद से, आप भी तो की तरह विधि तर्क के रूप में वर्तमान var आइटम गुजारें सकता:

<h:commandButton value="edit" action="#{bean.edit(item)}" /> 

साथ
public String edit(Item item) { 
    // ... 
} 

अच्छा है, यह केवल आपके webapp जावा EE 5 आधारित कंटेनरों के साथ असंगत होगा।

ओवरहेड के रूप में, List<T> से DataModel<T> से "रूपांतरण" विशेष रूप से सस्ता है। कोई भी नई चीजें कॉपी या बनाई गई हैं या नहीं, यह सिर्फ एक रैपर वर्ग है जो लपेटा वर्ग के तरीकों का प्रतिनिधित्व करती है और इसमें अन्य तरीकों को जोड़ती है (adapter pattern भी देखें)।

+2

हम निष्कर्ष निकाल सकते हैं कि 'DataModel' केवल दो कार्यों के लिए मौजूद है: पंक्ति जानकारी (ईएल 2.2 के साथ की जरूरत नहीं) प्रदान करने के लिए और श्रोताओं की इजाजत दी (लगता है कि यह कभी कभी अच्छा हो सकता है) के लिए? एक नोट: ईएल 2.2 का उपयोग करने से जेईई 5 कंटेनरों के साथ असंगत अनुप्रयोग प्रस्तुत नहीं होता है (आप मैन्युअल रूप से अपने ईएल पुस्तकालयों को अपडेट कर सकते हैं), यह एप्लिकेशन को जेईई 5 स्पेक के साथ असंगत प्रस्तुत करता है। –

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