سؤال

كيف يمكنني الحصول على طول ArrayList باستخدام JSF ش التعبير ؟

#{MyBean.somelist.length}

لا تعمل.

هل كانت مفيدة؟

المحلول

نعم، لأن بعض عبقرية في لجنة إنشاء API جافا قررت أنه على الرغم من فئات معينة لها أعضاء size() أو سمات length، فإنها لن تنفذ getSize() أو getLength() التي JSF ومعظم المعايير الأخرى تتطلب، لا يمكنك أن تفعل ما تريد.

وهناك عدة طرق للقيام بذلك.

واحد: إضافة وظيفة لفول بك وترجع طول:

In class MyBean:
public int getSomelistLength() { return this.somelist.length; }

In your JSF page:
#{MyBean.somelistLength}

والثاني: إذا كنت تستخدم Facelets (! يا إلهي، لماذا لا يمكنك استخدام Facelets)، يمكنك إضافة مساحة الجبهة الوطنية واستخدام وظيفة طول

In JSF page:
#{ fn:length(MyBean.somelist) }

نصائح أخرى

هل تعني حجم () أليس كذلك؟

#{MyBean.somelist.size()}

ويعمل من أجل لي (باستخدام جبوس التماس التي لديها امتدادات جبوس EL)

ملاحظة: هذا الحل هو أفضل للإصدارات القديمة من JSTL.للحصول على إصدارات أكبر ثم 1.1 أوصي باستخدام fn:length(MyBean.somelist) كما اقترح بيل جيمس.


هذه المادة بعض مزيد من المعلومات التفصيلية ، بما في ذلك آخر الحلول الممكنة ؛

المشكلة هي أن نحاول استدعاء قائمة حجم الطريقة (التي هي صالحة LinkedList طريقة) ، ولكن ليس JavaBeans المتوافقة مع طريقة حاصل ، وبالتالي فإن التعبير القائمة.الحجم-1 لا يمكن تقييمها.

هناك طريقتان لمعالجة هذه المعضلة.أولا, يمكنك استخدام RT مكتبة الأساسية, مثل هذا:

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

ثانيا ، إذا كنت ترغب في تجنب كود جافا في صفحات JSP, يمكنك تنفيذ المجمع بسيطة الصف الذي يحتوي على قائمة ويوفر الوصول إلى قائمة حجم المنشأة مع JavaBeans المتوافقة مع طريقة حاصل.أن الفول هو مدرج في قائمة 2.25.

المشكلة مع c_rt الأسلوب هو أن تحتاج إلى الحصول على متغير من طلب يدويا, لأنه لا يتعرف عليه خلاف ذلك.في هذه المرحلة كنت في وضع الكثير من التعليمات البرمجية على ما ينبغي أن يكون بنيت في وظيفة.هذا هو عملاق الخلل في ش.

انتهى بي الأمر باستخدام "المجمع" طريقة هنا هي الطبقة لذلك ؛

public class CollectionWrapper {

    Collection collection;

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

    public Collection getCollection() {
        return collection;
    }

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

الخيار الثالث أن لا أحد قد ذكر بعد وضع القائمة الخاصة بك في النموذج (على افتراض أنك تستخدم MVC) منفصلة السمة.حتى في النموذج الخاص بك سيكون لديك "someList" ثم "someListSize".التي قد تكون أبسط طريقة لحل هذه المسألة.

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

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

في الشاشة فإنه يعرض حجم الجدول

وعلى سبيل المثال: Table Size = 5

ويمكنك توسيع في نهاية المطاف اللغة EL باستخدام EL Functor ، والتي سوف تسمح لك للاتصال أي جافا الفاصوليا الأساليب، حتى مع المعلمات ...

وبعد 7 سنوات ... الحل facelets لا يزال يعمل بشكل جيد بالنسبة لي كمستخدم للمساهمة في المشروع

وتشمل مساحة الاسم كما xmlns:fn="http://java.sun.com/jsp/jstl/functions"

وواستخدام EL كما #{fn:length(myBean.someList)} على سبيل المثال في حالة استخدام في واجهة المستخدم للمساهمة في المشروع: جزء أدناه سبيل المثال يعمل بشكل جيد

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

يمكنك الحصول على طول باستخدام التالية ش:

#{فول.قائمة.حجم()}

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top