2010-05-31 10 views
0

개찰구에 일종의 장식 요소를 구현할 수 있습니까? 장식 된 부품의 이드를 특별히 기리는 동안? Wicket의 장식 요소 구성 요소

<wicket:border> 
<a wicket:id="link"><wicket:body/></a> 
</wicket:border> 
MyBorder.html

public XXXPage() 
{ 
    MyBorder border = new MyBorder("xxx"); 
    border.add(new Label("xxx", "Foo")); // label just as simplification. Its really a Component that we want to surround the anchor (linkify) around. 
    add(border); 
} 

XXXPage.html

<body> 
<span wicket:id="xxx"/> 
</body> 

: 감안할 때

:

현재 내가이 국경 구성 요소가 장식 역할을 사용하여 해결하려고

MyBorde r.java

public MyBorder(String id) 
{ 
    super(id); 
    AjaxLink link = new AjaxLink("link") 
    { 
     @Override public void onClick(AjaxRequestTarget arg0) 
     { 
     } 
    }; 
add(link); 
link.add(getBodyContainer()); // from javadoc of Wicket's Border 
} 

을 제공합니다 :

org.apache.wicket.WicketRuntimeException: The component(s) below failed to render. A  common problem is that you have added a component in code but forgot to reference it in the markup (thus the component will never be rendered). 

1. [Component id = xxx] 
at org.apache.wicket.Page.checkRendering(Page.java:1182) 

그래서 본질적으로, XXX의 구성 요소는 링크 구성 요소 투명하게 포장되어야한다. 이 xxx는 통제 할 수 없습니다. 는 "바나나 개찰구"구현에서

이 가능한 의사 코드가 될 것이다 : 나는 당신이 아무것도 ..이 두보다 당신의 ListView 내 WebMarkupContainer 또는 조각 중 하나를 추가하는 더 나은 운이 거라고 생각

Component wrapWithAction(Component a) { 
// now wrap 
    Link b = new Link() { 
    // handle link onClick and all that 
    } 
    b.wrap(a); 
    return b; 
} 
// 
+0

마지막 스 니펫에 대한 참고 사항 : 구성 요소 b는 a의 구성 요소 ID를 다시 만들어야합니다. (따라서 "투명"포장) –

답변

1

모두

+0

감사합니다. 나는 질문을 핵심 질문을 가리 키기 위해 바 꾸었습니다. 본질적으로 개찰 된 api로 기본적으로 번역 될 필요가있는 유사 코드를 보여주는 마지막 코드를 살펴보십시오. –

+0

감사합니다. 실제로 내가 계획 한 실제 데코레이터 방식은 작동하지 않습니다. 그러나, 이제 주변 경계와 "항목"자체를 가진 마크 업만 있습니다.링크를 추가하고 싶지 않은 경우에는 WebMarkupContainer 만 사용하십시오. 작동. thx –

+0

이걸 듣고 다행스럽게도 해결책을 찾았습니다. 일찍 도움을 청할 수 없었습니다. – Tim

0

이 구성 요소에 "onclick을"에 대한 AjaxEventBehavior 추가 ..

이 더 많은 도움이 필요하면 알려주세요 .. 등등 링크, 레이블, 다른 구성 요소를 포함 할 수 있습니다. 내가 연결된 Javadoc의 예제는 당신이 원하는 것을합니다.

Wicket의 거의 모든 기능에 비헤이비어를 추가 할 수 있습니다. 이는 가장 강력한 기능 중 하나입니다.

+0

고마워요, 토마스. 불행히도 나에 대한 필수적인 마크 업에서 주변 앵커를 추가 할 수 없다. :( –

+0

아마도 당신은 컴포넌트를 필요로한다면 일반 WebMarkupContainer 또는 비슷한 것을 사용하여 링크를 넣을 수 있을까? 하지만 추가 앵커가 필요한 이유는 알지 못합니다. 원래 구성 요소에 비헤이비어를 추가하면 구성 요소를 대체 할 필요가 없습니다. –

+0

토마스 (Thomas)는 래핑 된 구성 요소에 일반적으로 주석이 달린 텍스트입니다 그래서 html로 된 앵커 (anchor) ()는 의미 론적 의미와 스타일 가능성 (css)의 이유로 그것을 표시하는 데 사용됩니다. –

2