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