আমি কীভাবে ArrayList
জেএসএফ ইএল এক্সপ্রেশন ব্যবহার করে তার দৈর্ঘ্য পেতে পারি ?
#{MyBean.somelist.length}
কাজ করে না.
আমি কীভাবে ArrayList
জেএসএফ ইএল এক্সপ্রেশন ব্যবহার করে তার দৈর্ঘ্য পেতে পারি ?
#{MyBean.somelist.length}
কাজ করে না.
উত্তর:
হ্যাঁ, জাভা এপিআই তৈরির কমিটির কোনও প্রতিভা সিদ্ধান্ত নিয়েছে যে, কিছু নির্দিষ্ট শ্রেণীর size()
সদস্য বা length
বৈশিষ্ট্য থাকা সত্ত্বেও তারা বাস্তবায়ন করবে না getSize()
বা getLength()
যা জেএসএফ এবং অন্যান্য মানকগুলির প্রয়োজন, আপনি যা চান তা করতে পারবেন না।
এটি করার কয়েকটি উপায় রয়েছে।
এক: আপনার বিনের সাথে একটি ফাংশন যুক্ত করুন যা দৈর্ঘ্যটি দেয়:
ক্লাস মাইবিয়ান: পাবলিক ইন্ট getSomelistLength () {এই.সোমালিস্ট.লেন্থ ফিরে; } আপনার জেএসএফ পৃষ্ঠায়: # {MyBean.somelistLength}
দুটি: আপনি যদি ফেসলেটস ব্যবহার করেন (ওহ, Godশ্বর, আপনি ফেসলেটস কেন ব্যবহার করছেন না!), আপনি এফএন নেমস্পেস যুক্ত করতে পারেন এবং দৈর্ঘ্যের ফাংশনটি ব্যবহার করতে পারেন
জেএসএফ পৃষ্ঠায়: # {fn: দৈর্ঘ্য (মাইবিয়ান.সোমালিস্ট)}
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
আপনি মানে আকার () আপনি না?
#{MyBean.somelist.size()}
আমার জন্য কাজ করে (JBoss Seam ব্যবহার করে যা Jboss EL এক্সটেনশন রয়েছে)
#{MyBean.somelist.size}
(শেষের প্রথম বন্ধনী ছাড়া)।
দ্রষ্টব্য: এই সমাধানটি জেএসটিএল এর পুরানো সংস্করণগুলির জন্য ভাল। এর চেয়ে বেশি সংস্করণগুলির জন্য ১.১ আমি বিল জেমসের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();
}
}
তৃতীয় বিকল্প যা এখনও কেউ উল্লেখ করেনি তা হল আপনার তালিকার আকারটিকে মডেলের মধ্যে রেখে (ধরে নেওয়া যে আপনি এমভিসি ব্যবহার করছেন) পৃথক বৈশিষ্ট্য হিসাবে। সুতরাং আপনার মডেলটিতে আপনার "সামারিলিস্ট" এবং তারপরে "কিছু লিস্টসাইজ" থাকবে। এই সমস্যাটি সমাধান করার সহজ উপায় এটি।
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<h:outputText value="Table Size = #{fn:length(SystemBean.list)}"/>
স্ক্রিনে এটি সারণির আকার প্রদর্শন করে
উদাহরণ: Table Size = 5
আপনি শেষ পর্যন্ত ইএল ফান্ট্যাক্টর ব্যবহার করে EL ভাষা প্রসারিত করতে পারেন , যা আপনাকে প্যারামিটারগুলি সহ কোনও জাভা মটরশুটি পদ্ধতিতে কল করতে দেয় ...
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>
আপনি নিম্নলিখিত EL ব্যবহার করে দৈর্ঘ্য পেতে পারেন:
# {Bean.list.size ()}