وراثة علامات الويكيت لا تعمل مع الويكيت: العلامات الفرعية داخل حاويات العلامات

StackOverflow https://stackoverflow.com//questions/23015586

  •  21-12-2019
  •  | 
  •  

سؤال

أنا استخدم وراثة العلامات في Wicket 6.14.0 لإنشاء عنصر واجهة مستخدم بسيط يحتوي على العنوان والمحتوى.تبدو علامة الوالدين كما يلي:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket>
<wicket:panel>
<div wicket:id="widgetBox">
  <div wicket:id="widgetTitle"><wicket:enclosure child="icon"><span class="icon"><i wicket:id="icon"></i></span></wicket:enclosure>
    <h5 wicket:id="headline"></h5>
  </div>
  <div wicket:id="widgetContent"><wicket:child/></div>
</div>
</wicket:panel>
</html>

الكود الخاص به واضح جدًا، ولكن من أجل الاكتمال:

public class ParentPanel extends Panel {

        public ParentPanel(final String id, final IModel<String> title) {
            super(id, title);       

            WebMarkupContainer widgetBox = new WebMarkupContainer("widgetBox");         
            add(widgetBox);

            final WebMarkupContainer widgetTitle = new WebMarkupContainer("widgetTitle");           
            widgetBox.add(widgetTitle);

            final WebMarkupContainer icon = new WebMarkupContainer("icon");
            if (titleIcon != null) {
                // custom class
                icon.add(new IconBehavior("titleIcon"));
            } else {
                icon.setVisible(false);
            }
            widgetTitle.add(icon);
            widgetTitle.add(new Label("headline", title));

            widgetContent = new WebMarkupContainer("widgetContent");
            widgetContent.add(new WidgetContentBehavior());
            widgetBox.add(widgetContent);
        }
}

الآن للمكون الفرعي.إليك الترميز الأكثر بساطة:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket>
<wicket:extend>
  <span wicket:id="foobar"></span>
</wicket:extend>
</html>

وبالطبع كود جافا:

public class ChildPanel extends ParentPanel {

    public ChildPanel(final String id, final IModel<String> title) {
        super(id, title);
        add(new Label("foobar", "Foobar"));
    }

}

ما أتوقعه بالطبع هو صفحة معروضة تقول "Foobar" حيث يتم وضع علامة wicket:child.بدلاً من ذلك يوجد RuntimeException:

Last cause: Unable to find component with id 'foobar' in [TransparentWebMarkupContainer [Component id = wicket_extend3]]
    Expected: 'foobar:widgetBox:widgetContent:wicket_child2:wicket_extend3:foobar'.
    Found with similar names: 'foobar', foobar:foobar'

يبدو كما لو أن وراثة العلامات لا تدعم علامات wicket:child داخل حاوية MarkupContainer وبالتالي تفسد التسلسل الهرمي.لقد فكرت أيضًا في استخدام ملف حدود بدلا من ذلك، الحصول على نفس النتيجة بالرغم من ذلك.

سؤالي بالطبع هو كيفية إنجاز هذا العمل من خلال الحفاظ على التسلسل الهرمي الحالي، حيث أنه من المهم أن يكون لديك سيطرة (اقرأ:كائن Java) من widgetBox وwidgetContent.

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

المحلول

إليك سؤال آخر بخصوص مشكلتك:هل يمكن دمج علامة wicket:child ضمن مكون آخر على الصفحة؟

الإجابات المقدمة الاستخدام TransparentWebMarkupContainer لحل هذه القضية.

لكن, ، كما اكتشفت، لاحظ أن استخدام TransparentWebMarkupContainer سوف تفشل إذا حددت الصفحة الفرعية الخاصة بك wicket:fragmentس.انظر القضايا الويكيت-4545 و ويكيت-5440

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