سؤال

Hy، أريد عرض جزء معين (DIV مثال) من قالب Wicket الخاص بي فقط تحت حالة معينة (على سبيل المثال فقط إذا كان لدي البيانات لملء ذلك). المشكلة هي:

إذا أضفت لوحة فقط (ملء DIV) إذا تلقيت البيانات، فسيتم إلقاء استثناء في كل مرة أسميه فيها الصفحة بدون البيانات (لأن معرف الويكيت المشار إليه لا تتم إضافته إلى شجرة المكون).

الحل الوحيد الذي جاء في ذهني هو إضافة لوحة فارغة إذا لم يكن هناك بيانات. هذا ليس حلا مثاليا لأنني حصلت على بعض التعليمات البرمجية غير الضرورية في رمز Java والعديد من Divs الفارغة في HTML المقدسة.

فهل هناك حلا أفضل لتضمين عدة أجزاء من قالب النصيبات فقط تحت حالة؟

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

المحلول

على الرغم من أن هذا سؤال قديم هنا يمكن أن يكون حلا واحدا آخر: النصيبيت: العلبةهذه )

تحديث: الآن احتاجت هذه الوظيفة عن طريق نفسي (ل جيتويك). أنا أستخدم WebMarkupContainer One for Loggedin State و One for Loggedout State وتعيين الرؤية الصحيحة:

if (loggedIn()) {            
   WebMarkupContainer loggedInContainer = new WebMarkupContainer("loggedIn");
   //## do something with the user
   User user = getUserSomeWhere();
   loggedInContainer.add(new UserSearchLink("userSearchLink"));
   add(loggedInContainer);
   add(WebMarkupContainer("loggedOut").setVisible(false));
} else {
   add(new WebMarkupContainer("loggedIn").setVisible(false));
   WebMarkupContainer loggedOutContainer = WebMarkupContainer("loggedOut");
   loggedOutContainer.add(new LoginLink() {...});
   add(loggedOutContainer);
}

ميزة هذا بالنسبة لي هي أنني منع nullpointerexc في الخط // ## وميزة Encrose من الويكيت تبدو أكثر قبيحة بالنسبة لي في هذه الحالة أعتقد.

نصائح أخرى

مثل miaubiz قال، يمكنك الاتصال (خطأ) (FALSE) أو يمكنك تجاوز الطريقة غير القابلة للانفصال ()، إذا كانت الرؤية مشروطة إلى بعض الحالة الأخرى (الحقول المملوءة، على سبيل المثال).

نعم، تريد تجاوز غير قابل للفك. سيؤدي ذلك إلى الحفاظ على iSvisible = علامة HTML False من التقديم حتى صفحة HTML النهائية. أيضا، وفقا للمستندات (المذكورة في emptypanel.)، يمكنك استعمال ال WebMarkupContainer. كما مكون التفاف.

    this.add(new SimpleResourceModelLabel(NO_DATA_LABEL){
        private static final long serialVersionUID = 1L;

        @Override
        public boolean isVisible() { return myList.isEmpty(); } 
    });

    final WebMarkupContainer table = new WebMarkupContainer(MY_DATA_TABLE){
        private static final long serialVersionUID = 1L;

        @Override
        public boolean isVisible() { return !myList.isEmpty(); } 
    };

أعتقد أن هذا هو السبب في وجود emptypanel.. وبعد دون معرفة رمزك أكثر، لا يمكنني إلا أن أقول إن ما أعتقد أنك تفعله هو شيء سأفعله بمزيج من بعض الأطفال abstractrepeater. و شظية. وبعد إذا كنت على استعداد لإخبار المزيد حول ما تريد القيام به، وربما تقدم بعض الكود أيضا، سأكون سعيدا بالمساعدة بقدر ما أستطيع.

يمكنك الاتصال مسبقا (خطأ)؛ على المكون الذي تريد إخفاءه.

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