আপনি কীভাবে জেএসএফ এক্সপ্রেশন ভাষার তালিকার দৈর্ঘ্য পাবেন?


117

আমি কীভাবে ArrayListজেএসএফ ইএল এক্সপ্রেশন ব্যবহার করে তার দৈর্ঘ্য পেতে পারি ?

#{MyBean.somelist.length}

কাজ করে না.



@ জিবা আপনি তালিকার আকার প্রদর্শন করতে # # MyBean.somelist.size () use ব্যবহার করতে পারেন।
উমাইর

আপনি তালিকার ওপরে লুপ করতে প্রতিটি সি ব্যবহার করতে পারেন এবং লুপের বডিতে একটি ভেরিয়েবলের জন্য গণনা মান নির্ধারণ করুন: দরকারী আপনি বিশেষত যখন তালিকার উপর থেকে লুপ করছেন।
ডেভিড বালেক

উত্তর:


166

হ্যাঁ, জাভা এপিআই তৈরির কমিটির কোনও প্রতিভা সিদ্ধান্ত নিয়েছে যে, কিছু নির্দিষ্ট শ্রেণীর size()সদস্য বা lengthবৈশিষ্ট্য থাকা সত্ত্বেও তারা বাস্তবায়ন করবে না getSize()বা getLength()যা জেএসএফ এবং অন্যান্য মানকগুলির প্রয়োজন, আপনি যা চান তা করতে পারবেন না।

এটি করার কয়েকটি উপায় রয়েছে।

এক: আপনার বিনের সাথে একটি ফাংশন যুক্ত করুন যা দৈর্ঘ্যটি দেয়:

ক্লাস মাইবিয়ান:
পাবলিক ইন্ট getSomelistLength () {এই.সোমালিস্ট.লেন্থ ফিরে; }

আপনার জেএসএফ পৃষ্ঠায়:
# {MyBean.somelistLength}

দুটি: আপনি যদি ফেসলেটস ব্যবহার করেন (ওহ, Godশ্বর, আপনি ফেসলেটস কেন ব্যবহার করছেন না!), আপনি এফএন নেমস্পেস যুক্ত করতে পারেন এবং দৈর্ঘ্যের ফাংশনটি ব্যবহার করতে পারেন

জেএসএফ পৃষ্ঠায়:
# {fn: দৈর্ঘ্য (মাইবিয়ান.সোমালিস্ট)}

2
fn সম্ভবত যাওয়ার উপায়, দুর্ভাগ্যক্রমে এটি কেবল জেএসটিএল সংস্করণে আরও বেশি 1.1 এর পরে উপলব্ধ।
জেমস ম্যাকমাহন

27
Fn ব্যবহার করে: দৈর্ঘ্য আমার জন্য বেয়ার জেএসপি (কোন জেএসএফ, ফেসলেটস নয়; অতি উত্তরাধিকার প্রকল্পটি পর্যায়ক্রমে আসার আগে হালকাভাবে হালকা আপডেট করা হচ্ছে) দিয়ে কাজ করেছে। যথাযথ ট্যাগলিব ব্যবহার:<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
ক্রিস্টোফার পার্কার

57
আমার মতো এখানে অবতরণকারী লোকদের জন্য, এখনও ২ বছর পরে, আপনি নিজের ফেসলেটে নিম্নলিখিত নাম স্থানটি যুক্ত করতে পারেন: xmlns:fn="http://java.sun.com/jsp/jstl/functions"
ড্যামিয়েন মিরাস

59

আপনি মানে আকার () আপনি না?

#{MyBean.somelist.size()}

আমার জন্য কাজ করে (JBoss Seam ব্যবহার করে যা Jboss EL এক্সটেনশন রয়েছে)


EL এর নতুন স্পেসিফিকেশনগুলি আকার পদ্ধতিটি সমর্থন করে? কেউ নিশ্চিত করতে অথবা এই অস্বীকার করতে পারে?
জেমস ম্যাকমাহন 11

2
@ নেমো - এটি একটি জেএসআর 245 রক্ষণাবেক্ষণ রিলিজে সম্বোধন করা হচ্ছে: ব্লগস.সুন.com / কিচং / এন্ট্রি / জেএসআর_245_mr_part_i (জেইই স্পেকসের পরিপ্রেক্ষিতে, এটি জেইই 6 হবে)
ম্যাকডোয়েল

@ এমসিডোয়েল, তথ্যের জন্য ধন্যবাদ, আমি সত্যিই অবাক হয়েছি যে তারা সমস্যাটি সমাধান করতে আরও দীর্ঘ সময় নিয়েছিল।
জেমস ম্যাকমাহন 12

ধন্যবাদ. এটা খুবই আমার জন্য কাজ করেন। +1 টি। তবে JEE 6 ব্যাপকভাবে সমর্থিত না হওয়া অবধি আমি সম্ভবত "আরও বেশি স্ট্যান্ডার্ড" জেএসটিএল ফাংশনটি নিয়ে আছি।
হোসাম আলি

বিটিডাব্লু, সম্ভবত এটি বলতে জবস-এ কাজ করে #{MyBean.somelist.size}(শেষের প্রথম বন্ধনী ছাড়া)।
হোসাম আলি

14

দ্রষ্টব্য: এই সমাধানটি জেএসটিএল এর পুরানো সংস্করণগুলির জন্য ভাল। এর চেয়ে বেশি সংস্করণগুলির জন্য ১.১ আমি বিল জেমসেরfn:length(MyBean.somelist) পরামর্শ অনুযায়ী ব্যবহার করার পরামর্শ দিই ।


এই নিবন্ধটিতে আরও কয়েকটি সম্ভাব্য সমাধান সহ আরও কয়েকটি বিশদ তথ্য রয়েছে;

সমস্যাটি হ'ল আমরা তালিকার আকারের পদ্ধতিটি (যা একটি বৈধ লিংকডলিস্ট পদ্ধতি) চাওয়ার চেষ্টা করছি, তবে এটি জাভাবিয়ানস-কমপ্লায়েন্ট গেটর পদ্ধতি নয়, সুতরাং এক্সপ্রেশন তালিকাটি ize সাইজ -২ মূল্যায়ন করা যায় না।

এই দ্বিধা সমাধানের দুটি উপায় রয়েছে। প্রথমে আপনি আরটি কোর লাইব্রেরিটি ব্যবহার করতে পারেন:

<c_rt:out value='<%= list[list.size()-1] %>'/>

দ্বিতীয়ত, আপনি যদি আপনার জেএসপি পৃষ্ঠাগুলিতে জাভা কোড এড়াতে চান তবে আপনি একটি সাধারণ মোড়কের ক্লাস প্রয়োগ করতে পারেন যা একটি তালিকা রয়েছে এবং জাভাবিয়ানস-কমপ্লায়েন্ট গেটর পদ্ধতির সাহায্যে তালিকার আকারের সম্পত্তিটিতে অ্যাক্সেস সরবরাহ করে। যে শিম তালিকাভুক্ত করা হয়েছে 2.25।

সি_আরটি পদ্ধতির সমস্যাটি হ'ল আপনাকে অনুরোধ থেকে ম্যানুয়ালি ভেরিয়েবলটি নেওয়া দরকার কারণ এটি অন্যথায় তা স্বীকৃতি দেয় না। কার্যক্ষমতায় কী তৈরি করা উচিত তার জন্য আপনি এই মুহুর্তে প্রচুর কোড দিচ্ছেন। এটি EL এর একটি GIANT ত্রুটি।

আমি "র‍্যাপার" পদ্ধতিটি ব্যবহার করে শেষ করেছি, এখানে এটির জন্য ক্লাস রয়েছে;

public class CollectionWrapper {

    Collection collection;

    public CollectionWrapper(Collection collection) {
        this.collection = collection;
    }

    public Collection getCollection() {
        return collection;
    }

    public int getSize() {
        return collection.size();
    }
}

তৃতীয় বিকল্প যা এখনও কেউ উল্লেখ করেনি তা হল আপনার তালিকার আকারটিকে মডেলের মধ্যে রেখে (ধরে নেওয়া যে আপনি এমভিসি ব্যবহার করছেন) পৃথক বৈশিষ্ট্য হিসাবে। সুতরাং আপনার মডেলটিতে আপনার "সামারিলিস্ট" এবং তারপরে "কিছু লিস্টসাইজ" থাকবে। এই সমস্যাটি সমাধান করার সহজ উপায় এটি।



6
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

<h:outputText value="Table Size = #{fn:length(SystemBean.list)}"/>

স্ক্রিনে এটি সারণির আকার প্রদর্শন করে

উদাহরণ: Table Size = 5


হ্যাঁ এটি আমার কাছে এটি করার সহজ উপায়। আমি জেএসপি (লিগ্যাসি সিস্টেম) এর সাথে ওয়েবস্পিয়ার 6 ব্যবহার করছি। হ্যাশ কাজ না করায় একই হ'ল তবলিব ব্যবহার করুন এবং তারপরে 'ডলার চিহ্ন' ব্যবহার করুন has অর্থাত: {fn: দৈর্ঘ্য (সিস্টেমবিয়ান.লিস্ট)}
জ্যাকডেভ


-1

7 বছর পরে ... ফেসলেটস সলিউশনটি এখনও আমার পক্ষে জেএসএফ ব্যবহারকারী হিসাবে কাজ করে

নাম স্থান হিসাবে অন্তর্ভুক্ত করুন xmlns:fn="http://java.sun.com/jsp/jstl/functions"

এবং #{fn:length(myBean.someList)}উদাহরণস্বরূপ EL ব্যবহার করুন যদি জেএসএফ ইউআই ব্যবহার করে থাকেন: উদাহরণের নীচে খণ্ডটি ঠিক কাজ করে

<ui:fragment rendered="#{fn:length(myBean.someList) gt 0}">
    <!-- Do something here-->
</ui:fragment>

-5

আপনি নিম্নলিখিত EL ব্যবহার করে দৈর্ঘ্য পেতে পারেন:

# {Bean.list.size ()}


1
এটি মূলত দামোর উত্তর হিসাবে একই উত্তর ।
আর্টজম বি

6
হিসাবে @ আর্টজমবি। সুগারসেটস, ইতিমধ্যে অন্য কেউ ইতিমধ্যে পোস্ট করা একই উত্তরটির পরিমাণের মতো কি তা পোস্ট করা সাধারণত এখানে ভাল নয়। এক্ষেত্রে প্রায় ছয় বছর আগে
অ্যান্ড্রু বারবার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.