개찰구 마크 업 상속은 기사를 위해 작동하지 않습니다 : 마크 업 컨테이너 내 자식 태그

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

  •  21-12-2019
  •  | 
  •  

문제

나는 마크 업 상속 의 마크 업 상속 in 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>
.

및 물론 Java 코드 :

public class ChildPanel extends ParentPanel {

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

}
.

내가 기대하는 것은 물체가 "foobar"라고하는 렌더링 된 페이지가 "foobar"라는 렌더링 된 페이지입니다. 자식 태그가 배치됩니다. 대신이 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 : MarkupContainer 내의 하위 태그를 지원하지 않으므로 계층 구조를 망칩니다. 나는 또한 테두리를 사용하여 동일한 결과를 얻습니다. 내 질문은 WidgetBox 및 widgetContent의 제어 (읽기 : Java 개체)를 갖는 것이 중요하기 때문에 현재 계층 구조를 유지 함으로써이 작업을 수행하는 방법입니다.

도움이 되었습니까?

해결책

여기에 관한 또 다른 질문은 다음과 같습니다. 개찰구 : 하위 태그는 중첩 될 수 있습니다.페이지의 다른 구성 요소에서?

제공된 답변은 TransparentWebMarkupContainer를 사용하여 문제를 해결합니다.

그러나 , 알아내는 것처럼, 자식 페이지가 TransparentWebMarkupContainer를 정의하면 wicket:fragment를 사용하면 실패합니다. wicket-4545 WICKET-5440

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top