কীভাবে EL খালি অপারেটর জেএসএফে কাজ করবে?


88

জেএসএফ-তে কোনও উপাদান EL খালি অপারেটর ব্যবহার করে বা রেন্ডার করা যায়

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) ইঙ্গিতগুলিতে ব্যবহার করার চেষ্টা করি যে "এই খালি অভিব্যক্তিটি সর্বদা মিথ্যা হিসাবে মূল্যায়ন করে Only খালি অপারেটরের জন্য কেবল স্ট্রিং, মানচিত্র, অ্যারে এবং সংগ্রহের
অর্থবোধ রয়েছে

আরও অদ্ভুত, এটি সর্বদা আমার ক্ষেত্রে সত্যের মূল্যায়ন করে।
পিটার ডি বিয়

তাহলে myBeanকি হবে null? হবে true/ falseএখনও ফেরত পাঠানো অথবা এটি একটি ব্যতিক্রম নিক্ষেপ করতে পারি?
theyuv

9

বালুসকির সংগ্রহ বাস্তবায়নের পরামর্শ ব্যবহার করে আমি এখন আমার প্রাইমফেসগুলি 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...
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.