जेएसएफ में ईएल खाली ऑपरेटर कैसे काम करता है?


88

जेएसएफ में ईएल खाली ऑपरेटर का उपयोग करके एक घटक प्रदान किया जा सकता है या नहीं

rendered="#{not empty myBean.myList}"

जैसा कि मैंने समझा है कि ऑपरेटर शून्य-चेक ​​के रूप में काम करता है, लेकिन सूची खाली होने पर भी चेक की जाँच करें।

मैं अपने स्वयं के कस्टम वर्ग की कुछ वस्तुओं पर खाली चेक करना चाहता हूं, जो इंटरफ़ेस (ओं) या इंटरफेस के कुछ हिस्सों को मुझे लागू करने की आवश्यकता है? खाली ऑपरेटर किस इंटरफेस के साथ संगत है?

जवाबों:


151

से ईएल 2.2 विनिर्देश ( "मूल्यांकन के लिए कल्पना डाउनलोड करने के लिए यहाँ क्लिक करें" नीचे एक हो):

1.10 खाली ऑपरेटर - empty A

emptyऑपरेटर एक उपसर्ग ऑपरेटर है कि अगर एक मूल्य शून्य या खाली है निर्धारित करने के लिए इस्तेमाल किया जा सकता है।

मूल्यांकन करना empty A

  • अगर Aहै null, तो लौटेंtrue
  • अन्यथा, यदि Aखाली स्ट्रिंग है, तो वापस लौटेंtrue
  • अन्यथा, यदि Aकोई खाली सरणी है, तो वापस लौटेंtrue
  • अन्यथा, यदि Aखाली है Map, तो वापस लौटेंtrue
  • अन्यथा, यदि Aखाली है Collection, तो वापस लौटेंtrue
  • नहीं तो लौटो false

तो, इंटरफेस को देखते हुए, यह केवल Collectionऔर Mapकेवल पर काम करता है । आपके मामले में, मुझे लगता Collectionहै कि सबसे अच्छा विकल्प है। या, अगर यह एक जावबीन जैसी वस्तु है, तो Map। किसी भी तरह से, कवर के तहत, isEmpty()विधि का उपयोग वास्तविक जांच के लिए किया जाता है। इंटरफ़ेस विधियों पर जिन्हें आप लागू नहीं कर सकते हैं या नहीं करना चाहते हैं, आप फेंक सकते हैं UnsupportedOperationException


अजीब, मैं एक लंबे और ग्रहण (4.4.0) संकेत पर इसका उपयोग करने की कोशिश करता हूं कि "यह खाली अभिव्यक्ति हमेशा झूठे से संबंधित है। केवल स्ट्रिंग, नक्शे, सरणियों और संग्रह में खाली ऑपरेटर के लिए सार्थक मूल्य हैं"
पीटर डे बेज़

इससे भी अधिक अजीब, यह हमेशा मेरे मामले में सच का मूल्यांकन करता है।
पीटर डी ब्यू

अगर के बारे में क्या? myBean है है null? विल true/ falseअभी भी लौटाया जा सकता है या यह एक अपवाद फेंक सकता है?
वेव

9

संग्रह को लागू करने की BalusC के सुझाव का प्रयोग अब मैं अपने primefaces छिपा कर सकते हैं p:dataTableमेरे पर नहीं खाली ऑपरेटर का उपयोग dataModelफैली किjavax.faces.model.ListDataModel

कोड नमूना:

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import javax.faces.model.ListDataModel;
import org.primefaces.model.SelectableDataModel;

public class EntityDataModel extends ListDataModel<Entity> implements
        Collection<Entity>, SelectableDataModel<Entity>, Serializable {

    public EntityDataModel(List<Entity> data) { super(data); }

    @Override
    public Entity getRowData(String rowKey) {
        // In a real app, a more efficient way like a query by rowKey should be
        // implemented to deal with huge data
        List<Entity> entitys = (List<Entity>) getWrappedData();
        for (Entity entity : entitys) {
            if (Integer.toString(entity.getId()).equals(rowKey)) return entity;
        }
        return null;
    }

    @Override
    public Object getRowKey(Entity entity) {
        return entity.getId();
    }

    @Override
    public boolean isEmpty() {
        List<Entity> entity = (List<Entity>) getWrappedData();
        return (entity == null) || entity.isEmpty();
    }
    // ... other not implemented methods of Collection...
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.